की सूची और ऐरे मैं सूची और Arrays का उपयोग करते समय सी # structs संचालित करने के तरीके के बारे में मेरी समझ को समझने/समझने की कोशिश कर रहा हूं। मैं इस पोस्ट में एरिक की व्याख्या का पालन करता हूं Performance of array of struct typesstructs वैल्यू बनाम वैरिएबल
लेकिन मैं इसे एक कदम आगे ले रहा हूं।
struct Foo { public int A; public int B; public Foo[] ChildFoos; }
Foo parentFoo = new Foo();
parentFoo.ChildFoos = new Foo[1];
parentFoo.ChildFoos[0] = new Foo();
List<Foo> list = new List<Foo>();
list.Add(parentFoo);
लेकिन जब आप कॉल को चेन करते हैं तो व्यवहार बदल जाता है। सूची [0] एक मान वापस करनी चाहिए (एक चर नहीं) जहां चाइल्डफूज़ [0] एक चर वापस लौटना चाहिए।
list[0].ChildFoos[0].A = 4545;
इस मामले में क्या होता प्रतीत होता है सूची [0] को मूल्य के बजाय एक चर के रूप में माना जा रहा है। चाइल्डफूज़ [0]। सूची में माता-पिता में यह नया मान रखता है। यह कैसे संभव है?
पेरेंट फू स्ट्रक्चर पर ए सेट करने का प्रयास करने के साथ इसकी तुलना करें, जो संकलित नहीं होगा।
list[0].A = 877;
यह
महान प्रश्न और एक [mcve] का उत्कृष्ट उदाहरण। ओपी। अगर कोई इसे आजमा देना चाहता है तो यहां एक [Fiddle] (https://dotnetfiddle.net/mM5wDH) है। –
@himbrombeere क्यों परिवर्तन * * मानने योग्य है, नहीं क्यों वे किसी सूची में एक struct के एक मूल्य नहीं बदल सकते हैं सवाल पूछ रहा है। – Servy