尝试这样转换
Products1 = (IList<ProductInfo>)basicProfile.Products2.Select(ToProductInfo)
Products1 是一个
public IList<ProductInfo> Products { get; set; }
Product2 是一个
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 的工作方式(延迟执行)Select,创建一个 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 查询而无需多次迭代您的集合
关于c# - 将 IList<T1> 转换为 ILIst<T2>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50485386/