How to update an object in a List<> in C# How to update an object in a List<> in C# asp.net asp.net

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


or without linq

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