Generics C#4中的dynamic关键字是否允许对泛型执行某些以前不可能的操作?

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]; //使用仅在运行时才知道其值

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];
//使用仅在运行时才知道其值的类型。
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(…);
泛型和反射:并不是很好地结合在一起,但是如果你需要的话