Tôi có một List<>
đối tượng tùy chỉnh.
Tôi cần tìm một đối tượng trong danh sách này theo một số thuộc tính là duy nhất và cập nhật một thuộc tính khác của đối tượng này.
Cách nhanh nhất để làm điều đó là gì?
Câu trả lời:
Sử dụng Linq để tìm đối tượng bạn có thể làm:
var obj = myList.FirstOrDefault(x => x.MyProperty == myValue);
if (obj != null) obj.OtherProperty = newValue;
Nhưng trong trường hợp này, bạn có thể muốn lưu Danh sách vào Từ điển và sử dụng điều này thay thế:
// ... 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;
Chỉ để thêm vào phản hồi của CKoenig. Câu trả lời của anh ấy sẽ hoạt động miễn là lớp bạn đang xử lý là một loại tham chiếu (như một lớp). Nếu đối tượng tùy chỉnh là một cấu trúc, thì đây là một kiểu giá trị và kết quả của .FirstOrDefault
sẽ cung cấp cho bạn một bản sao cục bộ của nó, có nghĩa là nó sẽ không tồn tại trở lại bộ sưu tập, như ví dụ này cho thấy:
struct MyStruct
{
public int TheValue { get; set; }
}
Mã kiểm tra:
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();
Sản lượng là 10,1,145
Thay đổi cấu trúc thành một lớp và đầu ra là 10,12,145
HTH
hoặc không có linq
foreach(MyObject obj in myList)
{
if(obj.prop == someValue)
{
obj.otherProp = newValue;
break;
}
}
Cũng có thể thử.
_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
hoặc giá trị (bản sao)? nói cách khác, đối tượng bên trong danh sách có bị thay đổi không?