C# 为什么dynamic不假设它可以支持此操作?
我有一门课是这样的:C# 为什么dynamic不假设它可以支持此操作?,c#,dynamic,C#,Dynamic,我有一门课是这样的: public sealed class Repository<T> : IRepository<T> where T : RepositoryEntryBase, IRepositoryEntry, new() { /*Insert Stuff Here*/ } 公共密封类存储库:IRepository 其中T:RepositoryEntryBase,IRepositoryEntry,new() { /*在这里插入内容*/ }
public sealed class Repository<T> : IRepository<T>
where T : RepositoryEntryBase, IRepositoryEntry, new()
{
/*Insert Stuff Here*/
}
公共密封类存储库:IRepository
其中T:RepositoryEntryBase,IRepositoryEntry,new()
{
/*在这里插入内容*/
}
我正试图像这样实例化这个类:
Repository<dynamic> v = new Repository<dynamic>();
Repository v=newrepository();
我得到了这样一个错误:
public sealed class Repository<T> : IRepository<T>
where T : RepositoryEntryBase, IRepositoryEntry, new()
{
/*Insert Stuff Here*/
}
类型“dynamic”不能用作泛型类型或方法“ServiceLibraries.Repositories.Repository”中的类型参数“T”。没有从“dynamic”到“Data.IRepositoryEntry”的隐式引用转换
但是,MSDN文档说明了以下内容:
在编译时,假定类型为动态的元素支持任何操作
有什么我遗漏的吗?关于如何解决此问题有何想法?基于此错误,
存储库
要求T
实现IRepositoryEntry
。但是,dynamic
无法证明它确实实现了该接口
就泛型而言,动态
是对象
的同义词,您也不能将对象
用于类型t
。考虑存储库中的非动态代码。它可以:
IRepositoryEntry entry = new T();
这是完全有效的代码-但不适用于t=dynamic
您可以对dynamic
类型的值执行任何操作,但这并不意味着您可以在任何情况下都使用dynamic
——泛型恰恰是一个不起作用的例子
重要的是,“动态性”只影响(在编译时)知道它正在使用dynamic
的代码。。。例如,这里不包括存储库代码。在类定义中使用“t”时,您指的是泛型类型(不一定是动态类型)。此外,类定义还强制从存储库继承的类型也必须从RepositoryEntryBase继承,并实现IRepositoryEntry。动态类型不满足该约定如何定义“IRepository”(其中T:…?)公共接口IRepository其中T:IRepositoryEntry,new()