2013-02-26 18 views
5

मुझे अभी निम्न अपवाद मिला है, जो इंगित करता है कि Guid कोई ऑब्जेक्ट नहीं है।सी # में कोई ऑब्जेक्ट क्यों नहीं है?

'System.Guid' प्रकार की अभिव्यक्ति वापसी प्रकार के लिए इस्तेमाल नहीं किया जा सकता 'System.Object'

कैसे Guid एक वस्तु नहीं है?

और संकलक इसे कैसे समझता है? ऐसा कुछ होना चाहिए जो मुझे किसी प्रकार का ऑब्जेक्ट न होने पर रनटाइम पर पता लगाने की अनुमति देगा, यदि ऐसा है तो यह क्या होगा?

==================== अतिरिक्त जानकारी के साथ संपादित करें ====================

Expression.Lambda<Func<object>>(SomeExpression) 

जहां कुछ मामलों के लिए कुछ एक्स्प्रेशन गइड का निरंतर मूल्य हो सकता है।

+2

यह लगता संबंधित: http://stackoverflow.com/questions/2200209/expression-of-type-system-int32-cannot-be-used-for-return-type-system-object –

+0

हाँ, यह है, लेकिन मैं अनिवार्य रूप से नहीं डालना चाहता हूं, मुझे कैसे पता चलेगा कि बल्ले से कुछ काम करेगा या नहीं? अभिव्यक्ति ठीक काम करती है, जब तक कि मैं देशी/मूल्य प्रकार की सामग्री से निपटता हूं। – Alwyn

+3

आपके प्रश्न में नमूना कोड गुम है (और अधिमानतः MSXXN के लिंक के साथ CSXXXX त्रुटि कोड, ताकि आप स्पष्ट नहीं हो सकें कि क्या स्पष्ट नहीं है)। –

उत्तर

17
Expression.Lambda<Func<object>>(SomeExpression) 

समस्या यह है कि आप अभिव्यक्ति पेड़ गलत तरीके से उपयोग कर रहे हैं। भले ही बॉक्स ऑपरेशन सी # में अंतर्निहित है, फिर भी यह मौजूद है। यह अभिव्यक्ति पेड़ में अंतर्निहित नहीं है। निम्नलिखित इसे ठीक करना चाहिए:

Expression.Lambda<Func<object>>(
    Expression.Convert(SomeExpression, typeof(object)) 

तुम भी SomeExpression.Type.IsValueType की जांच कर सकता है या नहीं, इस अतिरिक्त स्पष्ट रूपांतरण जोड़ने का निर्णय करने के लिए।

+0

मार्क, जब तक मैं ग्रिड से निपटता हूं, निहित रूपांतरण ठीक काम कर रहा है। यह मेरे शब्दकोश, सूची, कस्टम जटिल वर्ग के साथ ठीक काम करता है - आप इसे नाम दें। मुझे नहीं लगता कि Guid एकमात्र अपवाद है, लेकिन यह निश्चित रूप से उनमें से एक है। – Alwyn

+5

@Alwyn और जो भी आप उल्लेख करते हैं वह एक * संदर्भ प्रकार * है। जैसा कि मैंने कहा: बॉक्स ऑपरेशन स्पष्ट होना चाहिए। 'Guid' एक * मान प्रकार * (एक 'संरचना') –

+0

@MarcGravell Gotcha है, जो बहुत सी चीजों को समझाएगा, इसलिए आपको मूल्य प्रकारों के लिए मुक्केबाजी की आवश्यकता है। सभी संदर्भ प्रकारों को एक मुफ्त पास मिलता है। – Alwyn

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