为什么动态没有假设它可以支持这种操作?

Ael*_*eis 3 c# dynamic

我有一个这样的课:

public sealed class Repository<T> : IRepository<T>
    where T : RepositoryEntryBase, IRepositoryEntry, new() 
{
    /*Insert Stuff Here*/
}
Run Code Online (Sandbox Code Playgroud)

我试图像这样实例化这个类:

Repository<dynamic> v = new Repository<dynamic>();
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

"动态"类型不能在泛型类型或方法"ServiceLibraries.Repositories.Repository"中用作类型参数"T".没有从"dynamic"到"Data.IRepositoryEntry"的隐式引用转换.

但是,MSDN文档说明如下:

在编译时,假定键入为动态的元素支持任何操作.

有什么我想念的吗?有关如何解决此问题的任何想法?

Jon*_*eet 6

考虑其中的非动态代码Repository<T>.它可能有:

IRepositoryEntry entry = new T();
Run Code Online (Sandbox Code Playgroud)

这是完全有效的代码 - 但不适用T=dynamic.

您可以对类型值执行任何操作dynamic,但这并不意味着您可以dynamic在任何情况下使用- 而泛型正是一个不起作用的示例.

重要的是,"动态性" 影响知道(在编译时)它正在使用的代码dynamic...... 例如,这里包括Repository<T>代码.