Я маю 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;
Просто щоб додати відповідь ККеніґа. Його відповідь буде працювати, доки клас, з яким ви маєте справу, є референсним типом (як клас). Якщо користувальницький об'єкт був структурою, це тип значення, і результати результатів .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,1145
Змініть структуру на клас, і результат буде 10,12,145
HTH
або без посилання
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";
objабо значення (копія)? іншими словами, чи буде змінено об’єкт у списку?