2011-09-07 10 views
11

मैं एक refrenced विधानसभा नाम "ए 7" ("दाल" नाम) में एक स्थिर वर्ग है:कैसे प्राप्त करने के लिए संदर्भित विधानसभा में खेतों और एक स्थिर वर्ग से उनके मूल्यों

ए 7 इस तरह:

public static class A7 
{ 
public static readonly bool NeedCoding = false; 
public static readonly string Title = "Desc_Title" 
public static readonly string F0 = ""; 
public static readonly string F1 = "Desc_F1"; 
public static readonly string F2 = "Desc_F2"; 
public static readonly string F3 = "Desc_F3"; 
public static readonly string F4 = "Desc_F4"; 
} 

मैं से सभी गुणों का नाम और मूल्य कैसे प्राप्त कर सकता हूं DAL assemby ए 7 कक्षा?

धन्यवाद

+0

पर विचार न करें कि मेरी कक्षा एक और विधानसभा – Arian

उत्तर

23

प्रतिबिंब का उपयोग करके, आपको फ़ील्ड देखने की आवश्यकता होगी; ये गुण नहीं हैं। आप निम्न कोड से देख सकते हैं, यह जनता के स्थिर सदस्यों के लिए लग रहा है:

class Program 
    { 
     static void Main(string[] args) 
     { 
      Type t = typeof(A7); 
      FieldInfo[] fields = t.GetFields(BindingFlags.Static | BindingFlags.Public); 

      foreach (FieldInfo fi in fields) 
      { 
       Console.WriteLine(fi.Name); 
       Console.WriteLine(fi.GetValue(null).ToString()); 
      } 

      Console.Read(); 
     } 
    } 
+0

इस बात पर विचार न करें कि मेरी कक्षा किसी अन्य असेंबली में है – Arian

+0

@ निमा प्रश्न स्पष्ट रूप से "एक रिफ्रेंस असेंबली में" कहता है, इसलिए यह मान लेगा कि आपके पास प्रासंगिक 'उपयोग' बयान हैं। –

+0

यह नाम के लिए है लेकिन मूल्य के लिए नहीं! – PVitt

0

बस DAL.dll (या जो भी आप इसे कहा जाता है) फ़ाइल का संदर्भ जोड़ने और इसे अनुभाग का उपयोग करने में शामिल हैं। फिर आप सार्वजनिक क्षेत्रों में प्रवेश करने में सक्षम होना चाहिए।

+0

में है हाँ आप Dal.dll –

+0

सही हो लेकिन तुम रनटाइम पर सार्वजनिक रूप से घोषित क्षेत्रों में से सभी के नाम प्राप्त करने में सक्षम नहीं होगा। यही कारण है कि आप प्रतिबिंब का उपयोग करना चाहते हैं। – stombeur

+0

मैं पूरी तरह से सहमत हूं –

3

देखें this या this सवाल।

जैसा कि आप पहले प्रश्न में नोटिस करेंगे, आप गुण और फ़ील्ड भी मिश्रण करते हैं। इस तरह

Type myType = typeof(MyStaticClass); 
FieldInfo[] fields= myType.GetFields(
     BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); 
foreach (FieldInfo f in fields) 
{ 
    // use f.Name and f.GetValue(null) here 
} 
+0

GetValue को एक उदाहरण की आवश्यकता है, लेकिन ए 7 स्थिर है। – PVitt

+0

@ पीवीट स्थिर वर्गों पर, 'शून्य' पास करें। –

+0

आह, फील्डइन्फो प्रकार को नहीं देखा, सोचा कि यह एक PropertyInfo होगा। मेरी गलती। – PVitt

2

somthing: खेतों, नहीं गुण

तो इस का एक प्रकार से काम करना चाहिए क्या आप की घोषणा कर रहे हैं?

FieldInfo[] fieldInfos = typeof(A7).GetFields(BindingFlags.Static | BindingFlags.Public); 
3

मैं एक ही मुद्दे का सामना करना पड़ा जब मैं इस वाक्य रचना (जहां "ConfigValues" स्थिर गुणों के साथ एक स्थिर वर्ग है और मैं नाम "lookingfor" के साथ एक संपत्ति के लिए देख रहा हूँ)

उपयोग करने वाली प्रॉपर्टी प्राप्त करने की कोशिश
PropertyInfo propertyInfo = ConfigValues.GetType().GetProperties().SingleOrDefault(p => p.Name == "LookingFor"); 

समाधान typeof ऑपरेटर का उपयोग किया गया बजाय

PropertyInfo propertyInfo = typeof(ConfigValues).GetProperties().SingleOrDefault(p => p.Name == "LookingFor"); 

कि काम करता है, तो आप उन्हें खेतों

के रूप में देखने की जरूरत नहीं है

HTH

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