gpt4 book ai didi

c# - 无法将类型 [具体] 隐式转换为 [接口(interface)]

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:08 28 4
gpt4 key购买 nike

我知道我冒着挨揍的风险,但我觉得我在这件事上要绕圈子。为了让模型可用于多个项目,我们已将模型移出到一个单独的项目(一个 DLL)中,作为一系列要实现的接口(interface)。我们的界面上有这一行:

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

所以在代码中,当我实现接口(interface)并设置属性时,我能够毫无问题地设置它们。我已经创建了两个接口(interface)的具体实现并相应地填充了它们。现在我正在尝试这样做:

 Parallel.ForEach(orders, order =>
{
order.Lines = items.FindAll(x => x.OrderNumber == order.OrderNumber).ToList();

});

为了将所有项目合并到订单的相应 Lines 属性中。现在,当模型包含在代码中时,这段代码工作正常,但当我们将它们作为接口(interface)移出并在具体方法中实现它们时,现在就被破坏了。错误是:

Cannot implicitly convert type 'System.Collection.Generic.List<ImportOrderLineModel>' to 'System.Collections.Generic.List<IImportOrderLineModel>'

我读过有关协方差的文章,苹果不是水果,其他地方已经给出了答案,但这对我来说是一个新答案。我尝试在界面上使用以下内容:

 public interface IImportOrderLineModel<out ImportOrderLineModel> where ImportOrderLineModel : class, IImportOrderModel

但是这样做会在其他接口(interface)的行上产生错误:

List<IImportOrderLineModel> Lines { get; set; }

Using generic type 'IImportsOrderLineModel' requires 1 type arguments

我怎样才能克服这个问题?

最佳答案

接受的答案似乎是正确的,但有更好的方法来解决这个问题。首选解决方案是:

IEnumerable<IImportOrderLineModel> lines = 
items.Where(x => x.OrderNumber == order.OrderNumber);
order.Lines = lines.ToList();

此解决方案消除了 Renat 回答中解决方案的两个问题:

  • 您以列表开始并以列表结束,因此您需要至少创建一个 新列表。但是FindAll不必要地创建另一个列表。那是额外的工作、额外的收款压力等等,换来的是没有任何好处。
  • Cast<IImportOrderLineModel>操作类似地创建一个新的枚举器,但这是不必要的;你总是可以免费简单地做一个协变引用转换到IEnumerable<IImportOrderLineModel> .

关于c# - 无法将类型 [具体] 隐式转换为 [接口(interface)],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59201842/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com