संपत्ति के लिए निर्धारित विधि नहीं पाया जा सकता है [डुप्लिकेट]

Dec 13 2020

मैं किसी भी वस्तु में सभी क्षेत्रों के माध्यम से पुनरावृति का रास्ता खोजने की कोशिश कर रहा हूं।

सबसे पहले मैंने मूल्य क्षेत्रों को प्राप्त करने और उन्हें मुद्रित करने के लिए प्रक्षेपण का उपयोग करने की कोशिश की, यह अच्छी तरह से काम किया:

 var ob = new {DeclarativeSecn = "da" , sksksk = "dingdong" };
       
 foreach (PropertyInfo property in ob.GetType().GetProperties())
      {
             Console.WriteLine(property.Name + " val " +  property.GetValue(ob));
       }

हालांकि, निश्चित रूप से, मैं कुछ नए मूल्यों के लिए फ़ील्ड सेट करना चाहता हूं, इसलिए इस पर पढ़ने के बाद, ऐसा लगता है कि यह काम करना चाहिए:

 foreach (PropertyInfo property in ob.GetType().GetProperties())
      {
             property.SetValue(ob,"new String");
       }

इससे मुझे "संपत्ति सेट विधि नहीं मिली"। मैं एक तर्क के रूप में अशक्त देने की कोशिश करता हूं, जो कुछ स्थानों पर किया जाता है:

 property.SetValue(ob,"new String",null);

इसके एक ही परिणाम हैं। मुझ पर यह विफल क्यों होता है?

EDIT: यह मेरे लिए इंगित किया गया है कि मैंने अपने लक्ष्य का पर्याप्त वर्णन नहीं किया है। जैसा कि लक्ष्य से ऊपर कहा गया है, किसी भी वस्तु में फ़ील्ड के माध्यम से पुनरावृति करना, जैसे कि यह उदाहरण ऑब्जेक्ट:

 var ob = new {DeclarativeSecn = "da" , sksksk = "dingdong" };

और फिर मूल प्रश्न में, मैं लिखता हूं "मैं कुछ नए मूल्यों के लिए फ़ील्ड सेट करना चाहता हूं" इसका मतलब है कि मैं "ऑब्जेक्ट" ऑब्जेक्ट में फ़ील्ड्स के माध्यम से पुनरावृति करना चाहूंगा, और उन्हें एक नए मूल्य पर सेट करूंगा।

धन्यवाद

जवाब

1 JonSkeet Dec 13 2020 at 22:26

मुझ पर यह विफल क्यों होता है?

उसी कारण से कि लेखन

ob.DeclarativeSecn = "new value";

कम-से-कम समय में विफल हो जाएगा, कम से कम आपके द्वारा दिए गए उदाहरण के लिए। आपकी वस्तु एक अनाम प्रकार है, और अनाम प्रकारों पर गुण केवल गेटर्स हैं - वे आपको गुणों के लिए नए मान सेट करने की अनुमति नहीं देते हैं। यदि आप बाद में गुणों को संशोधित करने में सक्षम होना चाहते हैं, तो अनाम प्रकारों का उपयोग न करें।

ध्यान दें कि आपके प्रश्न में किसी भी वस्तु के गुणों पर ध्यान देने की बात की गई है , लेकिन:

  • मुद्रण करते समय, आप मान रहे हैं कि सभी संपत्तियों में गेटर्स हैं; यह आमतौर पर सच है, लेकिन हमेशा नहीं
  • नए मान सेट करते समय, आप मान रहे हैं कि सभी गुणों में गेटर्स हैं और वे स्ट्रिंग गुण हैं

उन मान्यताओं में से कोई भी सामान्य रूप से सही नहीं है । इसलिए यदि आप किसी भी वस्तु को संभालने में सक्षम होना चाहते हैं , तो आपको अधिक जाँच करने की आवश्यकता होगी।

ThomasWeller Dec 13 2020 at 22:31

बेनामी प्रकार केवल एक प्रकार के पहले को स्पष्ट रूप से परिभाषित किए बिना एक ही ऑब्जेक्ट में रीड-ओनली गुणों के एक सेट को एनक्रिप्ट करने का एक सुविधाजनक तरीका प्रदान करते हैं ।

जोर मेरा।

ऐसा लगता है कि आप केवल-पढ़ने के लिए कोई मान सेट नहीं कर सकते। उचित लगता है।