При попытке использовать ключевое слово С# "как" для не-генерического типа, который не может быть применен, компилятор выдает ошибку, что тип не может быть преобразован.
Однако при использовании ключевого слова "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
}
}
Я обнаружил это поведение в гораздо большей кодовой базе, где отсутствие ошибки времени компиляции привело к проблеме во время выполнения.
Является ли конфликтное поведение по дизайну? Если да, то кто-нибудь может понять, почему?