Velvet Star Monitor

Standout celebrity highlights with iconic style.

updates

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

Writer Andrew Henderson

I have a List<> of custom objects.

I need to find an object in this list by some property which is unique and update another property of this object.

What is the quickest way to do it?

10 Answers

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/whatever
var dict = myList.ToDictionary(x => x.MyProperty);
// ... somewhere in code
MyObject found;
if (dict.TryGetValue(myValue, out found)) found.OtherProperty = newValue;
9

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

1

or without linq

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

Can also try.

 _lstProductDetail.Where(S => S.ProductID == "") .Select(S => { S.ProductPcs = "Update Value" ; return S; }).ToList();
1

You can do somthing like :

if (product != null) { var products = Repository.Products; var indexOf = products.IndexOf(products.Find(p => p.Id == product.Id)); Repository.Products[indexOf] = product; // or Repository.Products[indexOf].prop = product.prop;
}
var itemIndex = listObject.FindIndex(x => x == SomeSpecialCondition());
var item = listObject.ElementAt(itemIndex);
item.SomePropYouWantToChange = "yourNewValue";
2

This was a new discovery today - after having learned the class/struct reference lesson!

You can use Linq and "Single" if you know the item will be found, because Single returns a variable...

myList.Single(x => x.MyProperty == myValue).OtherProperty = newValue;
1

I found a way of doing it in one Line of code unsing LINQ:

yourList.Where(yourObject => yourObject.property == "yourSearchProperty").Select(yourObject => { yourObject.secondProperty = "yourNewProperty"; return yourObject; }).ToList();
var index = yourList.FindIndex(x => x.yourProperty == externalProperty);
if (index > -1)
{ yourList[index] = yourNewObject;
}

yourlist now has the updated object inside of it.

//Find whether the element present in the existing list if (myList.Any(x => x.key == "apple")) { //Get that Item var item = myList.FirstOrDefault(x => x.key == ol."apple"); //update that item item.Qty = "your new value"; }

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy