索引处的 IEnumerable 更新

IEnumerable Update At Index

我必须更新 IEnumerable 集合中的一个值。因为它是只读的,更新值的技巧是什么?

product.Variants 是一个 IEnumerable,我想更新这样的东西

product.Variants[0].条形码 ="某物"

当前我收到这样的错误

然后我将 product 变量传递给一个函数,该函数对 product.Variants

进行一些处理

someFunction (product) // 这个函数应该有上面更新的新条形码。

Error CS0021 文档说:

An attempt was made to access a value through an indexer on a data type that does not support Indexers.

就这么简单。 IEnumerable 仅公开枚举器而不是基础数据。如果您想访问该数据,您需要将 IEnumerable“具体化”到其数据集合中。

var list = product.Variants.ToList();
if(list.Count > 0)
{
    ProductVariant pv = list[0];
    ....
}

但这会“具体化”整个列表,如果您只需要第一项,您可能只需使用 IEnumerable 扩展名 FirstOrDefault;

var pv = product.Variants.FirstOrDefault();
if(pv != null)
{
   .....
}