Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于对象变量的对象搜索列表_C#_Search_List - Fatal编程技术网

C# 基于对象变量的对象搜索列表

C# 基于对象变量的对象搜索列表,c#,search,list,C#,Search,List,我有一个物品清单。这些对象有三个变量,ID、Name和value。这个列表中可能有很多对象,我需要根据ID或名称找到一个,然后更改值。 范例 class对象 { 公共字符串名称; 公共信息; 公共字符串值; } List TextPool=新列表(); 如何在TextPool中找到一个名为“test”的条目并将其值更改为“value”。 真正的程序有更多的搜索选项和需要更改的值,所以我不能只使用字典(尽管名称和UID或唯一标识符)。 任何帮助都很好您可以使用LINQ查找它,然后直接更改元素:

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

class对象
{
公共字符串名称;
公共信息;
公共字符串值;
}
List TextPool=新列表();
如何在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");
但是,我个人更愿意将其拆分,因为我觉得第二个选项的可维护性较差(对我来说,执行直接对查询结果“气味”产生副作用的操作).

听起来像是一项工作

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

[编辑:被狠狠地揍了一顿,但将此作为一个不同语法的示例,再加上一个链接]

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

如果要执行多个查找,可以将结果缓存在多个字典实例中(如果关键字不唯一,也可以缓存在查找实例中)。

调用.ToList()只是为了使用ForEach扩展名,这让我感觉更糟。@Joel:ForEach不是扩展名;)但是,是的,第二个案例对我来说也很难闻——但我想我也应该把它列为一个选项…@Joel:你有什么理由删除我的显式声明,然后加入var?“objec”是OP的类名,不是输入错误…@Reed:第二个示例的另一个选项是执行
TextPool.FindAll(o=>o.name==“test”).ForEach(o=>o.value=“value”)改为。@Reed-看起来像是打字错误,所以我后来修改了它以消除任何混淆。如果你想把它放回去,我不在乎。
var matchedObject =
   from t in TextPool
   where t.UName == "test"
   select t;
List<objec> TextPool = new List<objec>();
objec found = TextPool.FirstOrDefault(item => item.Name == "test");
if (found != null) found.value = "Value";
var find = TextPool.FirstOrDefault(x => x.Name == "test");
if (find != null)
{
    find.Name = "Value";
}