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;}
}


现在我有一种期望的方法

DataStoreChanges<ISomeDTOInterface>


,因此我尝试传递的实例
DataStoreChanges<SomeDTOClass>
会产生类型错误。它不会让我垂头丧气到界面:)
所以这怎么了

最佳答案

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

public interface DataStoreChanges<out T>


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

void SomeMethod<T> (DataStoreChanges<T> x)  where T : ICommonInterface
{
    ...
}

关于c# - 通用类和向下转换(类型转换),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4586193/

10-10 21:41