How to update an object in a List<> in C#
Using Linq to find the object you can do:
var obj = myList.FirstOrDefault(x => x.MyProperty == myValue);if (obj != null) obj.OtherProperty = newValue;
But in this case you might want to save the List into a Dictionary and use this instead:
// ... define after getting the List/Enumerable/whatevervar dict = myList.ToDictionary(x => x.MyProperty);// ... somewhere in codeMyObject found;if (dict.TryGetValue(myValue, out found)) found.OtherProperty = newValue;
Just to add to CKoenig's response. His answer will work as long as the class you're dealing with is a reference type (like a class). If the custom object were a struct, this is a value type, and the results of .FirstOrDefault
will give you a local copy of that, which will mean it won't persist back to the collection, as this example shows:
struct MyStruct{ public int TheValue { get; set; }}
Test code:
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();
The output is 10,1,145
Change the struct to a class and the output is 10,12,145
HTH