C#4中的dynamic
关键字引入了处理以前不可能的对象的新方法。这与泛型有何重叠?具体来说,是否有可能有用的操作现在合法且有效?
例如,现在不可能:
// Use a type whose value is known only at runtime.
Type t = ...;
List<t> l = new List<t>();
// ... (add some items to the list)
t first = l[0];
一旦dynamic
可用,有没有办法完成类似的事情?
答案 0 :(得分:2)
动态对你没什么帮助。您仍然需要使用Type.GetGenericTypeDefinition()
/ MakeGenericType()
初始创建对象,这不太令人愉快。
如果我理解正确的话,动态将会做的是一旦你有这样构造的类型,它将使它更容易使用。例如,你知道你有一些类型的列表,即使编译器没有。因此,如果您已将该列表分配给动态变量,则可以执行调用它的.Add()
方法等操作,并且调用应在运行时解析。
请注意,我个人还没有玩过这个,所以在你自己尝试之前,这仍然只是传闻。
答案 1 :(得分:1)
你现在可以这样做,虽然你必须真的想要它。观察:
Type t = ...;
typeof(List<>)
.MakeGenericType(t)
.GetMethod(...);
泛型和反思:并不是真的更好,但如果你需要它......