我有一个这样的课:
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文档说明如下:
在编译时,假定键入为动态的元素支持任何操作.
有什么我想念的吗?有关如何解决此问题的任何想法?
考虑其中的非动态代码Repository<T>.它可能有:
IRepositoryEntry entry = new T();
Run Code Online (Sandbox Code Playgroud)
这是完全有效的代码 - 但不适用T=dynamic.
您可以对类型值执行任何操作dynamic,但这并不意味着您可以dynamic在任何情况下使用- 而泛型正是一个不起作用的示例.
重要的是,"动态性" 仅影响知道(在编译时)它正在使用的代码dynamic...... 例如,这里不包括Repository<T>代码.