C#4中的动态关键字是否允许使用泛型进行某些以前不可能的操作?

StackOverflow https://stackoverflow.com/questions/1630729

  •  06-07-2019
  •  | 
  •  

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 可用,有没有办法完成类似的事情?

有帮助吗?

解决方案

动态对你没什么帮助。您仍然需要使用 Type.GetGenericTypeDefinition() / MakeGenericType()来初始创建对象,这不太令人愉快。

如果我理解正确的话,动态将会做的是一旦你有这样构造的类型,它将使它更容易使用。例如,知道你有一些类型的列表,即使编译器没有。因此,如果您已将该列表分配给动态变量,则可以执行调用它的 .Add()方法,并且调用应在运行时解析。

请注意,我个人还没有玩过这个,所以在你自己尝试之前,这仍然只是传闻。

其他提示

你现在可以这样做,虽然你必须真的想要它。观察:

Type t = ...;
typeof(List<>)
    .MakeGenericType(t)
    .GetMethod(...);

泛型和反思:并不是真的更好,但如果你需要它......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top