如何更新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);