Generics C#4中的dynamic关键字是否允许对泛型执行某些以前不可能的操作?
C#4中的Generics C#4中的dynamic关键字是否允许对泛型执行某些以前不可能的操作?,generics,dynamic,c#-4.0,Generics,Dynamic,C# 4.0,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
关键字引入了处理以前不可能的对象的新方法。这与泛型有何重叠?具体来说,是否有可能有用的操作现在合法有效
例如,这在现在是不可能的:
// 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];
//使用仅在运行时才知道其值的类型。
t型=。。。;
列表l=新列表();
// ... (将一些项目添加到列表中)
t first=l[0];
一旦
dynamic
可用,有没有一种方法可以完成类似的任务?dynamic在这里帮不了你多少忙。您仍然需要使用Type.GetGenericTypeDefinition()
/MakeGenericType()
来创建最初的对象,这并不令人愉快
如果我理解正确,dynamic将做的是,一旦您以这种方式构造了类型,它将使您更容易使用。例如,您知道您有某种类型的列表,即使编译器没有。因此,如果您已将该列表分配给一个动态变量,则可以执行诸如调用它的.Add()
方法之类的操作,并且该调用应在运行时解决
请注意,我个人还没有玩过这个,所以在你亲自尝试之前,这仍然只是道听途说 你现在可以这样做,尽管你必须真正想要它。注意:
Type t = ...;
typeof(List<>)
.MakeGenericType(t)
.GetMethod(...);
Type t=。。。;
类型(列表)
.MakeGenericType(t)
.GetMethod(…);
泛型和反射:并不是很好地结合在一起,但是如果你需要的话