尝试对无法转换的非泛型类型使用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
}
}
Run Code Online (Sandbox Code Playgroud)
我在更大的代码库中发现了这种行为,其中缺少编译时错误导致运行时出现问题.
设计是否存在冲突行为?如果是这样,有没有人知道为什么?