c# - 无法将类型 [具体] 隐式转换为 [接口]
问题描述
我知道我冒着被撞的风险,但我觉得我在这个问题上绕圈子。为了使模型可用于多个项目,我们已将模型移到单独的项目(DLL)中,作为一系列接口来实现。在我们的界面上有这一行:
List<IImportOrderLineModel> Lines { get; set; }
哪个链接到这个界面:
public interface IImportOrderLineModel
{
string OrderNumber { get; set; }
int? LineNumber { get; set; }
string ItemId { get; set; }
string CustomerItemId { get; set; }
double? Quantity { get; set; }
decimal? Price { get; set; }
int? QuantityBackOrdered { get; set; }
string Comments { get; set; }
string PickLocation { get; set; }
string OrderFilled { get; set; }
string HostUom { get; set; }
string Type { get; set; }
}
所以在代码中,当我实现接口并设置属性时,我可以毫无问题地设置它们。我已经创建了两个接口的具体实现并相应地填充了它们。现在我正在尝试这样做:
Parallel.ForEach(orders, order =>
{
order.Lines = items.FindAll(x => x.OrderNumber == order.OrderNumber).ToList();
});
为了将所有项目组合到订单的相应 Lines 属性中。现在,当模型包含在代码中时,这段代码运行良好,但现在当我们将它们作为接口移出并在具体方法中实现它们时,它就坏了。错误是:
Cannot implicitly convert type 'System.Collection.Generic.List<ImportOrderLineModel>' to 'System.Collections.Generic.List<IImportOrderLineModel>'
我读过关于协方差和苹果不是其他地方给出的水果答案,但这对我来说是一个新的答案。我尝试在界面上使用以下内容:
public interface IImportOrderLineModel<out ImportOrderLineModel> where ImportOrderLineModel : class, IImportOrderModel
但是这样做会在另一个界面的线上产生错误:
List<IImportOrderLineModel> Lines { get; set; }
使用泛型类型“IImportsOrderLineModel”需要 1 个类型参数
我怎样才能克服这个?
解决方案
看起来这可能有效:
order.Lines = items.FindAll(x => x.OrderNumber == order.OrderNumber)
.Cast<IImportOrderLineModel>()
.ToList();
推荐阅读
- typescript - Typescript 装饰器在 React Native 中没有按预期工作
- python - ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all() OpenCV AutoCanny 函数
- angular - Angular - 具有 ngFor 的父级等待子级单击,然后再移动到 ngFor 中的新项目
- c++ - 集合中的比较器如何与 C++ 中的仿函数一起使用?
- c++ - 检查板中的项目旁边是否有任何东西(二维数组)
- python - 在python中将字符串放在类似字节的对象上
- javascript - JavaScript / HTML 使用 getElementById
- wordpress - Wordpress:如何使用 wp i18n 翻译自定义 Composer 包?
- python - 如果测试套件作为进程执行,则骑行会卡住
- python - 如何在新的谷歌广告 python 库中更新广告系列预算?