基于对象变量搜索对象列表

我有一个对象列表。 这些对象有三个变量,ID,Name和value。 此列表中可能有很多对象,我需要根据ID或名称找到一个对象,然后更改该值。 例

class objec { public string Name; public int UID; public string value; } List TextPool = new List(); 

如何在TextPool中找到名称为“test”的一个条目,并将其值更改为“Value”。 真正的程序有更多的搜索选项和需要更改的值,所以我不能只使用一个字典(虽然名称和UID或唯一标识符)。 任何帮助都会很棒

您可以使用LINQ找到它,然后直接更改元素:

 var item = TextPool.FirstOrDefault(o => o.Name == "test"); if (item != null) item.value = "Value"; 

如果您想要更改匹配的所有元素,您甚至可以做到:

 TextPool.Where(o => o.Name == "test").ToList().ForEach(o => o.value = "Value"); 

但是,我个人宁愿把它分开,因为我觉得第二种选择不太可维护(做直接导致副作用的操作对我来说“气味”)……

 var find = TextPool.FirstOrDefault(x => x.Name == "test"); if (find != null) { find.Name = "Value"; } 

听起来像LINQ的工作!

 var matchedObject = from t in TextPool where t.UName == "test" select t; 

这是假设您的搜索是在代码中定义的。 如果您的代码由UI驱动,您可能只需要进行线性迭代。 要搜索所有可能的属性,而不进行索引,它将不会更快。

[编辑:被击败了,但留下这个作为一个不同的语法的例子,加上一个链接]

 List TextPool = new List(); objec found = TextPool.FirstOrDefault(item => item.Name == "test"); if (found != null) found.value = "Value"; 

如果要执行多次查找,可以将结果缓存在多个Dictionary <>实例中(如果键不是唯一的,则查找<>实例)。