2012-03-18 31 views
9

का उपयोग करके प्रकार प्राप्त करें मैं प्रतिबिंब का उपयोग करके अपनी कक्षा की संपत्ति प्राप्त करने का प्रयास कर रहा हूं लेकिन यह एकमात्र रनटाइमप्रॉपर्टीइन्फो को लौट रहा है - एक प्रकार के नाम के रूप में।प्रतिबिंब

मैं वस्तु MyObject actualData है - यह संपत्ति शामिल हैं - स्ट्रिंग और मेरे प्रकार DatumType के रूप में "आइटम" के रूप में "नाम"

जब मैं डिबगिंग हूँ मैं देख सकता हूँ, कि actualData 2 गुण है, पहले एक के प्रकार है स्ट्रिंग और दूसरा एक DatumType है, लेकिन जब मैं इस का उपयोग करें:

string typeName = actualData.getType().getProperty("Item").getType().Name - यह मेरे RuntimePropertyInfo, नहीं DatumType

जैसा कि आप देख सकते हैं कि मैं गलत कर रहा हूँ रिटर्न? मैं सी # - नेट 4.0 का उपयोग कर रहा हूँ। बहुत बहुत धन्यवाद!

+0

सी # पर विचार केस संवेदी है। आपने जो प्रश्न उठाया है वह वह नहीं हो सकता है जो आपने वास्तव में किया है। – hvd

+0

क्या आप मुझसे मजाक कर रहे हैं? : डी संख्या यह सुनिश्चित करने के लिए कि समस्या –

+0

नहीं है मैंने यह नहीं कहा कि समस्या थी। ध्यान दें कि मैंने इसे उत्तर के बजाय टिप्पणी के रूप में कैसे शामिल किया? लेकिन अगर आप जिस कोड को वास्तव में कोशिश करते हैं, उसमें शामिल नहीं है, तो हम अनुमान लगा रहे हैं कि आपने जो किया है, केवल पूंजीकरण तय किया गया है, या अन्य परिवर्तन भी हैं। – hvd

उत्तर

13

आपको PropertyInfo ऑब्जेक्ट getProperty() रिटर्न का प्रकार मिल रहा है। प्रयास करें

string typeName = actualData.getType().getProperty("Item").PropertyType.Name; 

आप वर्तमान में PropertyInfo वस्तु के माध्यम से वस्तु को सौंपा मूल्य के प्रकार चाहते हैं, आप कह सकते हैं:

string typeName = actualData.getType().getProperty("Item").GetValue(actualData, null).GetType().Name; 

लेकिन उस मामले में आप भी बस कह सकते हैं:

string typeName = actualData.Item.GetType().Name; 
+0

यह मुझे केवल "लौटाता है" –

+1

के नाम के रूप में "ऑब्जेक्ट" को संपत्ति को 'ऑब्जेक्ट' के रूप में परिभाषित किया जा सकता है, लेकिन इसे 'डेटाम टाइप' मान दिया गया है। GetProperty केवल परिभाषित प्रकार को लौटाता है, वर्तमान मूल्य के प्रकार नहीं। किसी भी प्रकार को 'ऑब्जेक्ट' प्रकार की संपत्ति को असाइन किया जा सकता है। आपको 'PropertyInfo' का उपयोग करना चाहिए और असाइन किए गए मान के प्रकार को प्राप्त करने के लिए' GetValue() 'पर कॉल करना चाहिए। –

+0

तो क्या इस प्रकार को पाने का कोई तरीका है? क्योंकि अगर मैं वास्तविक डेटा पर डिबगिंग में दिखता हूं - मैं देख सकता हूं कि आइटम डेटाम टाइप है, केवल प्रतिबिंब मुझे कुछ और देता है –

1

actualData.getType().getProperty("Item") 

PropertyInfo के प्रकार को पुनः प्राप्त करता है।

आप तो अपने प्रकार के लिए पूछते हैं:

actualData.getType().getProperty("Item").getType() 

क्या आप वास्तव में क्या निरीक्षण आपको मिल मिलता है।

मुझे संदेह है कि यह अंतिम getType() आवश्यक नहीं है।

संपादित करें: किसी ने इस उत्तर को कम किया है जो अनुचित imho है। सवाल यह है कि "क्या आप देख सकते हैं कि मैं क्या गलत कर रहा हूं?" और एक getType होने का उत्तर बहुत सही है। PropertyInfo में ढूँढना तब आसान होता है जब पूछताछ करने वाला व्यक्ति जानता है कि वह क्या गलत कर रहा है।

उस व्यक्ति को जिसने इस उत्तर को कम किया: कृपया अगली बार जब आप कुछ डाउनवोट करते हैं तो कम से कम एक टिप्पणी छोड़ दें। Stackoverflow केवल तभी समझ में आता है जब हम एक-दूसरे से सीखते हैं, न कि बस हर किसी को परेशान करते हैं।

1

GetType() हमेशा मौजूदा ऑब्जेक्ट का प्रकार लौटाएं, न कि ऑब्जेक्ट ऑब्जेक्ट।

आपके मामले में, का उपयोग कर string typeName = actualData.getType().getProperty("Item").PropertyType.Name

+0

काम नहीं करता है। उदाहरण के लिए, यदि संपत्ति एक शून्य (तिथि की तारीख) है, तो "Nullable'1" लौटाती है। केवल स्ट्रिंग गुणों के लिए काम करता है। – Pachanka