c# - 在实际类型上实现的通用接口
问题描述
基本上我有一个随机模型对象的集合。我需要找出 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
{
...
}
解决方案
推荐阅读
- combobox - 多个 ComboBox 在 PowerApps 上协同工作
- python - Flask 给出 503 但不记录?
- bluetooth - Winsock 2 发现蓝牙设备只显示以前配对的设备
- python - 如何使用 glob2 库选择特定的文本文件
- python - 纸浆添加至少一个 LpAffineExpression 等于一个的约束
- python-3.x - 如何通过 raw_input() 打破 while 循环?蟒蛇 3
- php - 在 CodeIgniter 出错之前加载 Div css 样式
- javascript - 在Javascript中的正则表达式中提取文本
- javascript - 我正在使用 Javascript 创建口袋妖怪纸牌游戏,但不确定我是否以正确的方式进行
- google-sheets - 如何将带有 reCaptcha 的表单连接到 Google 电子表格