正如在 C 3.5 中发现的那样,由于类型擦除,以下内容是不可能的:-
int foo<T>(T bar)
{
return bar.Length; // will not compile unless I do something like where T : string
}
foo("baz");
我相信这在 C# 和 java 中不起作用的原因是由于一个称为类型擦除的概念,请参阅http://en.wikipedia.org/wiki/Type_erasure。
在阅读了动态关键字后,我写了以下内容: -
int foo<T>(T bar)
{
dynamic test = bar;
return test.Length;
}
foo("baz"); // will compile and return 3
因此,据我了解,动态将绕过编译时检查,但如果类型已被删除,除非它更深入并使用某种反射,否则它肯定仍然无法解析符号?
以这种方式使用动态关键字是不好的做法,这是否会使泛型更强大一些?