C# 如果其他列表中存在,则设置属性
我有两个类型为C# 如果其他列表中存在,则设置属性,c#,linq,C#,Linq,我有两个类型为Derp的列表: public class Derp { public bool Valid; public int SomeValue; public int MoreValues; public int EvenMoreValues; public int ThereAreManyValues; } List<Derp> a = new List<Derp>(); List<Derp> b = new
Derp
的列表:
public class Derp
{
public bool Valid;
public int SomeValue;
public int MoreValues;
public int EvenMoreValues;
public int ThereAreManyValues;
}
List<Derp> a = new List<Derp>();
List<Derp> b = new List<Derp>();
/// Populate both
var c = a.Intersect(b).Select(x=> { x.Valid = true; return x; });
公共类Derp
{
公共布尔有效;
公共价值;
公共价值观;
公共价值观;
公共投资有很多价值;
}
列表a=新列表();
列表b=新列表();
///填充两者
var c=a.Intersect(b).Select(x=>{x.Valid=true;返回x;});
如果a
中存在b
,我需要将Valid
设置为true,并保留a
中的所有值。我可以理解上面的代码片段只保留了相交的对象,但我需要保留a
我也尝试过其他有趣的事情(var c=a.Where(x=>b.Contains(x)).Sel…
),但我认为我对列表方法的理解还不够,无法解决这个问题。尝试一下:
b.ForEach(x => {if (a.Contains(x)) {x.Valid = true;} });
以上工作。但是,请注意@SriramSakthivel的评论,并在可能的情况下重新考虑您的方法
Linq不是治疗副作用的好工具。放弃使用linq的想法,编写foreach循环。或者编写一个linq查询来查询您需要的对象,然后使用foreach来更新它。奇怪的是,为什么这么说(linq不是一个好工具)?我说linq不是一个解决副作用的好工具(并不意味着linq不是一个好工具)。linq的完整形式是语言集成查询。顾名思义,它应该只用于查询数据,而不是更新数据。酷,真不敢相信我对Linq的q如此视而不见。我决定改为实现foreach循环。您的答案似乎与它没有什么不同。是的,这是一个比使用Linq更好的解决方案。事实上,除了
List
,我不认为任何其他集合都与ForEach
方法相关联。