``在编译一些使用具有类型约束的泛型的 C# 代码时,我遇到了一个有趣的好奇心。我写了一个快速测试用例来说明。我将 .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;
有人可以解释为什么会这样吗?