我有一个对象列表。这些对象有三个变量,ID,Name和&值。此列表中可能有很多对象,我需要根据ID或名称找到一个对象,然后更改该值。 实施例
class objec
{
public string Name;
public int UID;
public string value;
}
List<objec> TextPool = new List<objec>();
如何在TextPool中找到名称为“test”的一个条目,并将其值更改为“Value”。 真正的程序有更多的搜索选项和需要更改的值,所以我不能只使用一个字典(虽然名称和UID或唯一标识符)。 任何帮助都会很棒
答案 0 :(得分:31)
您可以使用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");
然而,我个人宁愿把它分开,因为我觉得第二个选项不太可维护(做直接导致副作用的操作对我来说“气味”)......
答案 1 :(得分:2)
var find = TextPool.FirstOrDefault(x => x.Name == "test");
if (find != null)
{
find.Name = "Value";
}
答案 2 :(得分:1)
听起来像是LINQ的工作!
var matchedObject =
from t in TextPool
where t.UName == "test"
select t;
这是假设您的搜索是在代码中定义的。如果您的代码由UI驱动,您可能只需要进行线性迭代。要搜索所有可能的属性,而不进行索引,它将不会更快。
[编辑:被击败了,但留下这个作为不同语法的示例,加上链接]
答案 3 :(得分:0)
List<objec> TextPool = new List<objec>();
objec found = TextPool.FirstOrDefault(item => item.Name == "test");
if (found != null) found.value = "Value";
如果要执行多次查找,可以将结果缓存到多个Dictionary&lt;&gt;实例(如果键不唯一,则为Lookup&lt;&gt;实例)。