मेरे पास एक 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
या मान (कॉपी) का संदर्भ मिलेगा ? दूसरे शब्दों में, क्या सूची के अंदर वस्तु बदल जाएगी?