我有一个类似于
的对象列表的字典class Client
{
public int Hash { get; set; }
public bool Active { get; set; }
}
var ClientsDict = new Dictionary<string, List<Client>>();
我在列表中设置单个记录值没有问题
ClientsDict[userId].First(a => a.Hash == hash).Active = true;
如何进行相反的操作并将列表中的所有其他内容设置为false?
ClientsDict[userId].All().Active = false; //cannot resolve symbol
注意:我想避免使用foreach
编辑:
ClientsDict[userId].ForEach(a => a.Active = false); //this works
答案 0 :(得分:4)
如果您正在改变事物,那么您不应该将其表达为LINQ转换。只需使用常规foreach
循环:
foreach(var client in ClientsDict[userId])
{
client.Active = false;
}
您也可以使用List<T>.ForEach
method,但我会反对。
答案 1 :(得分:0)
使用Where
LINQ方法表示相反的条件并循环结果集:
foreach(var client in ClientsDict[userId].Where(c => c.Hash != hash))
{
client.Active = false;
}
编辑:用于比较的ForEach()
方法版本:
ClientsDict[userId]
.Where(c => c.Hash != hash)
.ToList()
.ForEach(c => c.Active = false);
我通常不喜欢使用ForEach()
方法,但我不得不承认它在这里看起来并不太糟糕。也就是说,由于该方法仅适用于List<T>
,因此您被迫致电.ToList()
。
关于它的使用是否是一个好主意的更哲学讨论,请参见此处:“foreach” vs “ForEach”。