当试图对不能强制转换为的非泛型类型使用C# "as“关键字时,编译器会给出一个无法转换该类型的错误。
但是,当对泛型类型使用"as“关键字时,编译器不会给出错误:
public class Foo { }
public class Bar<T> { }
public class Usage<T> {
public void Test() {
EventArgs args = new EventArgs();
var foo = args as Foo; // Compiler Error: cannot convert type
var bar = args as Bar<T>; // No compiler error
}
}
我在一个更大的代码库中发现了这种行为,其中缺少编译时错误导致了运行时的问题。
这种相互冲突的行为是故意的吗?如果是这样的话,有没有人知道为什么?
发布于 2015-01-26 20:18:33
请注意,as运算符仅执行引用转换、可空转换和装箱转换。as运算符不能执行其他转换,如用户定义的转换,这些转换应改为使用强制转换表达式来执行。
https://stackoverflow.com/questions/28149927
复制相似问题