C# 使用LINQ to实体将字符串添加到字符串类型的IEnumerable
我有一组对象,它们的属性类型为C# 使用LINQ to实体将字符串添加到字符串类型的IEnumerable,c#,.net,linq,C#,.net,Linq,我有一组对象,它们的属性类型为IEnumerable 我的代码 foreach (var student in students) { string term = SomeMethodhere(); students.Where(x => x.Id == student.Id) .ToList() .ForEach(x => {
IEnumerable
我的代码
foreach (var student in students)
{
string term = SomeMethodhere();
students.Where(x => x.Id == student.Id)
.ToList()
.ForEach(x =>
{
x.FieldsOfStudy.ToList().Add(term);
});
}
我没有错误,但研究领域保持不变
我错过了什么
我错过了什么
ToList()
创建一个新列表,其中包含在FieldOfStudy
中找到的所有元素。它不会修改原始枚举
事实上,不能保证任何东西都可以修改原始枚举;很有可能FieldsOfStudy
实际上是一个数组(因此不能添加任何元素)
底线:您不应该修改作为IEnumerable提供的内容。如果希望FieldsOfStudy
是可变的,请将其声明为一个接口,该接口提供修改列表的方法,例如或
设计理念:如果将字段声明为IEnumerable
属性,则表示从该属性返回的对象可能是实现IEnumerable
的任何对象。如果在调用代码时依赖于将该对象强制转换为更具体的对象(可以添加项的对象),则当FieldsOfStudy
属性的实现发生更改时,调用代码可能会中断。如果可以将FieldsOfStudy
属性分配给,情况可能会有所不同,因为调用代码可以控制属性中存储的内容
我错过了什么
ToList()
创建一个新列表,其中包含在FieldOfStudy
中找到的所有元素。它不会修改原始枚举
事实上,不能保证任何东西都可以修改原始枚举;很有可能FieldsOfStudy
实际上是一个数组(因此不能添加任何元素)
底线:您不应该修改作为IEnumerable提供的内容。如果希望FieldsOfStudy
是可变的,请将其声明为一个接口,该接口提供修改列表的方法,例如或
设计理念:如果将字段声明为IEnumerable
属性,则表示从该属性返回的对象可能是实现IEnumerable
的任何对象。如果在调用代码时依赖于将该对象强制转换为更具体的对象(可以添加项的对象),则当FieldsOfStudy
属性的实现发生更改时,调用代码可能会中断。如果可以将FieldsOfStudy
属性分配给,情况可能会有所不同,因为调用代码可以控制属性中存储的内容。x.FieldsOfStudy.ToList()
生成列表的新实例。所以您实际上是在向新集合添加元素
可能的解决方法(如果您可以将new Instance of list设置为propertyFieldsOfStudy
):
{
var列表=x.FieldsOfStudy as ILST??新列表(x.FieldsOfStudy);
列表。添加(术语);
x、 FieldsOfStudy=列表;
}
x.FieldsOfStudy.ToList()
生成列表的新实例。所以您实际上是在向新集合添加元素
可能的解决方法(如果您可以将new Instance of list设置为propertyFieldsOfStudy
):
{
var列表=x.FieldsOfStudy as ILST??新列表(x.FieldsOfStudy);
列表。添加(术语);
x、 FieldsOfStudy=列表;
}
此处为学生创建循环,然后在同一循环中更新每个学生
可能的解决方案和变化:
提供的研究领域为ICollection或iList
students.ToList().ForEach(s=>s.FieldsOfStudy.Add(SomeMethodhere()));
这里的循环是为学生创建的,然后每个学生在同一个循环中更新
可能的解决方案和变化:
提供的研究领域为ICollection或iList
students.ToList().ForEach(s=>s.FieldsOfStudy.Add(SomeMethodhere()));
x.FieldsOfStudy.ToList()
创建一个新列表,然后丢弃该列表;它应该类似于x.FieldsOfStudy.Add(术语)
x.FieldsOfStudy.ToList()
创建一个新列表,然后丢弃该列表;它应该类似于x.FieldsOfStudy.Add(术语)代码>