如何更新C#中List <>中的对象

我有一个List<>的自定义对象。

我需要通过一些独特的属性在这个列表中find一个对象,并更新这个对象的另一个属性。

什么是最快的方法呢?

使用Linqfind你可以做的对象:

 var obj = myList.FirstOrDefault(x => x.MyProperty == myValue); if (obj != null) obj.OtherProperty = newValue; 

但在这种情况下,您可能想要将列表保存到一个字典中,而不是使用它:

 // ... define after getting the List/Enumerable/whatever var dict = myList.ToDictionary(x => x.MyProperty); // ... somewhere in code MyObject found; if (dict.TryGetValue(myValue, out found)) found.OtherProperty = newValue; 

只是为了补充CKoenig的回应。 只要你所处理的类是一个引用类(就像一个类),他的答案就可以工作。 如果自定义对象是一个结构体,则这是一个值types,而.FirstOrDefault的结果会给你一个本地副本,这将意味着它不会持久回到该集合,如下例所示:

 struct MyStruct { public int TheValue { get; set; } } 

testing代码:

 List<MyStruct> coll = new List<MyStruct> { new MyStruct {TheValue = 10}, new MyStruct {TheValue = 1}, new MyStruct {TheValue = 145}, }; var found = coll.FirstOrDefault(c => c.TheValue == 1); found.TheValue = 12; foreach (var myStruct in coll) { Console.WriteLine(myStruct.TheValue); } Console.ReadLine(); 

输出是10,1,145

将结构更改为一个类,输出是10,12,145

HTH

或没有linq

 foreach(MyObject obj in myList) { if(obj.prop == someValue) { obj.otherProp = newValue; break; } } 

也可以试试。

  _lstProductDetail.Where(S => S.ProductID == "") .Select(S => { S.ProductPcs = "Update Value" ; return S; }).ToList(); 
 var itemIndex = listObject.FindIndex(x => x == SomeSpecialCondition()); var item = listObject.ElementAt(itemIndex); listObject.RemoveAt(itemIndex); item.SomePropYouWantToChange = "yourNewValue"; listObject.Insert(itemIndex, item);