19

मैं निम्नलिखित ऑटो संपत्तिDefaultValue विशेषता मेरी ऑटो संपत्ति के साथ काम नहीं कर रहा

[DefaultValue(true)] 
public bool RetrieveAllInfo { get; set; } 

जब मैं कोड मैं डिफ़ॉल्ट झूठी लगता है false है के लिए अंदर इसका इस्तेमाल करने की मुझे लगता है इस के लिए डिफ़ॉल्ट मान है कोशिश एक bool चर, क्या किसी के पास कोई सुराग है जो गलत है ??

+0

[इसी तरह के प्रश्न] (http://stackoverflow.com/questions/705553/net-defaultvalueattribute-on-properties)। वीएस2015 में: 'सार्वजनिक बूल पुनर्प्राप्तिअलेइन्फो {प्राप्त करें; सेट; } सच =; 'यह [सी # 6] (https://blogs.msdn.microsoft.com/csharpfaq/2014/11/20/new-features-in-c-6/) सुविधा है। – marbel82

उत्तर

26

DefaultValue विशेषता केवल (जब एक रूप को डिजाइन उदाहरण के लिए) क्या एक संपत्ति का डिफ़ॉल्ट मान है दृश्य स्टूडियो डिजाइनर बताने के लिए प्रयोग किया जाता है। यह कोड में विशेषता का वास्तविक डिफ़ॉल्ट मान सेट नहीं करता है।

अधिक यहाँ जानकारी: http://support.microsoft.com/kb/311339

+1

आप फिलिप धन्यवाद, इसलिए मुझे लगता एकमात्र समाधान निर्माता से है। धन्यवाद –

11

[DefaultValue] केवल (उदाहरण के लिए) क्रमबद्धता API (जैसे XmlSerializer), और कुछ UI तत्व (जैसे PropertyGrid) द्वारा किया जाता है। यह मूल्य निर्धारित नहीं करता है; आपको लगता है कि के लिए एक निर्माता का उपयोग करना चाहिए:

public MyType() 
{ 
    RetrieveAllInfo = true; 
} 

या क्षेत्र मैन्युअल रूप से सेट है, यानी एक स्वचालित रूप से लागू किया-संपत्ति का उपयोग नहीं: इस के लिए

private bool retrieveAllInfo = true; 
[DefaultValue(true)] 
public bool RetrieveAllInfo { 
    get {return retrieveAllInfo; } 
    set {retrieveAllInfo = value; } 
} 
0

एक हैक this लिंक पर है।

संक्षेप में, निर्माता के अंत में इस समारोह कहते हैं।

static public void ApplyDefaultValues(object self) 
    { 
     foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(self)) { 
      DefaultValueAttribute attr = prop.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute; 
      if (attr == null) continue; 
      prop.SetValue(self, attr.Value); 
     } 
    } 
+2

यह खतरनाक है और इसका उपयोग नहीं किया जाना चाहिए। यह व्युत्पन्न वर्ग के गुणों सेट से पहले आधार वर्ग निर्माता, समाप्त हो गया है इससे पहले कि व्युत्पन्न वर्ग संपत्ति setters काम बनाने के लिए आवश्यक कुछ भी स्थापित करने के लिए एक अवसर मिल सके। – hvd

संबंधित मुद्दे