c# - 铸造 IList到 ILI 列表
问题描述
试图像这样投射
Products1 = (IList<ProductInfo>)basicProfile.Products2.Select(ToProductInfo)
Products1 是一个
public IList<ProductInfo> Products { get; set; }
产品 2 是
public IList<Product> Products { get; }
这是我对 Product2 的每个元素应用的方法
internal static ProductInfo ToProductInfo(Product product)
{
if (product == null)
{
return null;
}
return new ProductInfo
{
Id = product.Id,
EffectiveTimestamp = product.EffectiveTimestamp,
ExpiryTimestamp = product.ExpiryTimestamp
};
}
Product 和 ProductInfo 具有相同的结构并且几乎相同
我抓住了这个
System.InvalidCastException : Unable to cast object of type
'SelectArrayIterator`2[Domain.Product,WebApi.Contracts.ProductInfo]' to type
'System.Collections.Generic.IList`1[WebApi.Contracts.ProductInfo]'.
而且它甚至没有进入 ToProductInfo 方法
解决方案
由于 linq 的工作方式(延迟执行)选择,创建一个 IEnumerable
您想要实现的目标可以通过添加 ToList() 来完成
Products1 = basicProfile.Products2.Select(ToProductInfo).ToList()
或根据您的用例,将 Products1 定义为
public IEnumerable<ProductInfo> Products { get; set; }
有关更多信息,请访问此页面 https://msdn.microsoft.com/en-us/library/bb308959.aspx和延迟查询评估部分
这允许您链接 linq 查询而无需多次迭代您的集合
推荐阅读
- javascript - 一次只播放一个视频 HTML5 和流畅的轮播
- c++ - 在 C++ 公共标头中包含嵌套类
- java - 在 JavaFX 中,我想要一个按钮 appendText 并更新一个 ArrayList
- javascript - useEffect 在初始加载和更新时运行 - 我如何限制仅更改?
- javascript - 如果元素存在,如何使手风琴不起作用并告诉我无法读取未定义的属性“classList”?
- curve-fitting - 使用 lmfit 拟合电容器的幅度(频率响应)
- flutter - GestureDetector 中的增量和主要增量有什么区别?
- ssh - X11 转发:`xclock` 有效,但 `cmake-gui` 无效
- html - 如何在以窗口为中心的 div 中启用具有非固定高度的滚动条?
- python - 浮士德与 Kafka-python 之间的区别