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()