2008-11-05 12 views
110

कल्पना करें कि निम्नलिखितबाइंडिंगफ्लैग्स। इग्नोरकेस Type.GetProperty() के लिए काम नहीं कर रहा है?

एक प्रकार टी में फ़ील्ड कंपनी है। निम्नलिखित कॉल मैं अशक्त मिल हालांकि

Type t = typeof(T); 
t.GetProperty("company", BindingFlags.IgnoreCase) 

किसी एक विचार आया Whith

Type t = typeof(T); 
t.GetProperty("Company") 

: जब निम्न विधि क्रियान्वित यह पूरी तरह काम करता है?

+0

जबकि आपका प्रश्न मान्य है, तो आप प्रतिबिंब में आवरण को क्यों नजरअंदाज करना चाहते हैं? – OregonGhost

+9

@ ओरेगॉनगोस्ट: क्या इससे कोई फर्क पड़ता है? – leppie

+6

जबकि आपका मेटा प्रश्न मान्य है, यह वास्तव में वास्तव में कोई फर्क नहीं पड़ता। मेरे अधिकांश प्रश्नों के रूप में, मेरा प्राथमिक कारण ज्ञान के लिए भूख है;) –

उत्तर

256

आप डिफ़ॉल्ट लुक-अप झंडे ओवरराइट कर दिया है, अगर आप नए झंडे आप सभी की जानकारी ताकि संपत्ति पाया जा सकता है प्रदान करने की आवश्यकता को निर्दिष्ट की जरूरत है। उदाहरण के लिए: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

+2

किसी को भी कोई विचार है कि ऐसा क्यों है (ज्ञान के लिए पूछना;)) – Shrivallabh

9

आप को जोड़ने के लिए BindingFlags.Public | BindingFlags.Instance

4

धन्यवाद, यह वास्तव में आज मुझे चुटकी में मदद करता है। मैंने ऑडिट जानकारी सहेजी थी, लेकिन संपत्ति के नाम पर गलत आवरण के साथ। (ऑडिटिंग एक डातालियर में बनाया गया है।) वैसे भी मुझे इग्निरेकेस को बाध्यकारी ध्वज के रूप में जोड़ना पड़ा, लेकिन फिर भी यह तब तक काम नहीं करता जब तक कि मेरे सहकर्मी को यह जवाब नहीं मिला। परिणामी कार्य:

public static void SetProperty(Object R, string propertyName, object value) 
{ 
    Type type = R.GetType(); 
    object result; 
    result = type.InvokeMember(
     propertyName, 
     BindingFlags.SetProperty | 
     BindingFlags.IgnoreCase | 
     BindingFlags.Public | 
     BindingFlags.Instance, 
     null, 
     R, 
     new object[] { value }); 
} 

यह एक कक्षा का हिस्सा है जिसे मैं डॉटमैजिक कहते हैं।

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