泛型类和向下转换(类型转换)

haz*_*nli 2 c# generics

public interface ISomeDTOInterface 
{
    ...
}

public class    SomeDTOClass : ISomeDTOInterface
{
    ...
}

public interface DataStoreChanges<T>
{
    IEnumerable<T> data {get;}
    IEnumerable<Guid> removedItems {get;}
    IEnumerable<Guid> newItems {get;}
    IEnumerable<Guid> modifiedItems {get;}
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个期望的方法

DataStoreChanges<ISomeDTOInterface>
Run Code Online (Sandbox Code Playgroud)

,所以我尝试传递一个实例 DataStoreChanges<SomeDTOClass>,它会生成一个类型错误.它不会让我垂头丧气接口:)所以这里有什么不对.

Ani*_*Ani 5

在C#4中,您可以使界面协变.为此,请将接口声明更改为:

public interface DataStoreChanges<out T>
Run Code Online (Sandbox Code Playgroud)

否则,您可以使方法通用并添加相关的类型约束.

void SomeMethod<T> (DataStoreChanges<T> x)  where T : ICommonInterface
{
    ...
}
Run Code Online (Sandbox Code Playgroud)