私が持っている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になります。
HTH
または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
または値(コピー)を取得しますか?つまり、リスト内のオブジェクトは変更されますか?