我想更改IEnumerable中的属性的值,但不会更改。
IEnumerable<T1> enumlist = null;
IList<T1> personList = SelectAll();
enumlist = personList.Where(p => p.propertyA.Contains(searchText));
for (int i = 0; i < enumlist.Count(); i++)
{
enumlist .ElementAt(i).PrpertyA = "blah blah...";
}
答案 0 :(得分:-1)
您不能在可能尚未实现的状态下进行迭代。这是它的工作原理
IEnumerable.GetEnumerator()
返回一个 enumerator 对象(实现IEnumerator
)。它具有返回当前项目的属性Current
和方法MoveNext()
,该方法将枚举数前进到下一个项目。
该接口不能保证已被枚举,并且不会公开索引器。为了能够访问可以枚举的内容的索引,需要以特定的方式对其进行访问。像foreach
循环,或直接使用IEnumerbale
接口,或通过已经完成并将其转换为支持直接索引的方法的方法
选项1
// create a concrete List out of the Enumerbale
var list = personList.Where(p => p.propertyA.Contains(searchText)).ToList();
for (int i = 0; i < enumlist.Count(); i++)
enumlist[i].PrpertyA = "blah blah...";
选项2
enumlist = personList.Where(p => p.propertyA.Contains(searchText));
// Use the iterative properties of foreach to enumerate enumlist
foreach(var item in enumlist)
item.PrpertyA = "blah blah...";