我有一个List<>
自定义对象。
我需要通过一些唯一的属性在此列表中找到一个对象,并更新该对象的另一个属性。
最快的方法是什么?
Answers:
使用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的回应。只要您要处理的类是引用类型(如类),他的答案就会起作用。如果自定义对象是一个struct,则它是一个值类型,并且的结果.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";
obj
或值(副本)的引用吗?换句话说,列表内的对象会改变吗?