首页 > 解决方案 > 在实际类型上实现的通用接口

问题描述

基本上我有一个随机模型对象的集合。我需要找出 2 个给定对象之间的区别并更新它们。每种类型的模型(C# 类)都有自己找出差异的方法(IDifferer)。

interface ICollection<T> where T: BaseModel
{
    Task<bool> Update(T oldModel, T newModel, IDifferer<T> differer);
}

interface IDifferer<T> where T : BaseModel
{
    DifferResult<T> Differ(T oldModel, T newModel);
}

对于实际的模型类,我需要具有以下相应的不同:

class MyModel: BaseModel
{
    ...
}

class MyModelDifferer: IDifferer<MyModel>
{
    DifferResult<MyModel> IDifferer<MyModel>.Differ(MyModel oldModel, MyModel newModel)
    {
        ...
    }
}

然后我使用以下内容更新MyModel

ICollection<MyModel> collection = ...;
MyModel oldModel = ...;
MyModel newModel = ...;
var success = await collection.Update(oldModel, newModel, new MyModelDifferer());

但错误是:Cannot convert MyModelDifferer to IDifferer<BaseModel>. 谁能建议如何解决这个问题?

编辑:这是更多的类/枚举

abstract class BaseModel
{
    public string Id { get; set; }
}

class DifferResult<T> where T: BaseModel
{
    DifferenceType Difference { get; set; }
}

enum DifferenceType
{
    ...
}

标签: c#

解决方案


推荐阅读