У меня есть List<>
пользовательских объектов.
Мне нужно найти объект в этом списке с помощью некоторого свойства, которое является уникальным и обновляет другое свойство этого объекта.
Каков самый быстрый способ сделать это?
У меня есть List<>
пользовательских объектов.
Мне нужно найти объект в этом списке с помощью некоторого свойства, которое является уникальным и обновляет другое свойство этого объекта.
Каков самый быстрый способ сделать это?
Использование Linq для поиска объекта, который вы можете сделать:
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. Его ответ будет работать до тех пор, пока класс, с которым вы имеете дело, является ссылочным типом (например, классом). Если пользовательский объект был структурой, это тип значения, а результаты .FirstOrDefault
предоставят вам локальную копию этого, что будет означать, что он не будет возвращаться к коллекции, как показано в этом примере:
struct MyStruct
{
public int TheValue { get; set; }
}
Тестовый код:
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
НТН
или без 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);
item.SomePropYouWantToChange = "yourNewValue";
Вы можете сделать что-то вроде:
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;
}