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

时间:2010-07-01 00:07:22

标签: c# search list

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

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

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

4 个答案:

答案 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;实例)。