`` Я столкнулся с интересным любопытством при компиляции некоторого кода на С#, который использует generics с ограничениями типа. Я нарисовал быстрый пример для иллюстрации. Я использую .NET 4.0 с Visual Studio 2010.
namespace TestCast
{
public class Fruit { }
public class Apple : Fruit { }
public static class Test
{
public static void TestFruit<FruitType>(FruitType fruit)
where FruitType : Fruit
{
if (fruit is Apple)
{
Apple apple = (Apple)fruit;
}
}
}
}
Приведение к Apple не выполняется с ошибкой: "Невозможно преобразовать тип" FruitType "в" TestCast.Apple ". Однако, если я изменяю строку для использования оператора as
, он компилируется без ошибок:
Apple apple = fruit as Apple;
Может кто-нибудь объяснить, почему это так?