2009-10-21 13 views
8

मुझे एक सामान्य विधि TResult Foo<TSource, TResult>(IEnumerable<TSource> source) मिली है और यदि TResult को dynamic के रूप में घोषित किया गया है, तो मैं अन्य प्रकार की घोषणाओं के मुकाबले एक अलग कोड पथ निष्पादित करना चाहता हूं।मैं टाइपऑफ (गतिशील) के लिए कैसे परीक्षण करूं?

if (typeof(TResult) == typeof(int)) 
    return ExpressionFactory.CreateExpandoFunction<TSource, TResult>(); 

लेकिन if (typeof(TResult) == typeof(dynamic)) संकलन नहीं करता है:

आप की तरह सामान कर सकते हैं नियमित प्रकारों के लिए

dyanmic x = Foo<int, dynamic>(list); 

के बाद से गतिशील अपने आप में एक प्रकार मैं के लिए क्या परीक्षण किया जाना चाहिए नहीं है:

वहाँ रनटाइम पर दृढ़ संकल्प की इस तरह बनाने के लिए जब विधि घोषणा के साथ कहा जाता है वैसे भी है? IDynamicMetaObjectProvider?

EDIT यह System.Linq.Expression मूल्यांकनकर्ता के लिए एक SQL पाठ का हिस्सा है।

if (type is struct) 
    create selector that initializes each element to result values 
else if (type is class) 
    create selector that initialize each element to new instance and set member properties 
else if (type is dynamic) 
    create selector that initializes each element to new `ExpandoObject` and populates/sets member properties 
+0

इसके लिए आवश्यकता है? – Gishu

उत्तर

10

सीधे शब्दों में आप नहीं कर सकते हैं क्योंकि वहाँ कोई प्रकार गतिशील है बोल: अगर TResult गतिशील है शाखा विशिष्ट इच्छा कुछ छद्म तर्क यह है कि कुछ इस तरह दिखता है। यदि प्रकार मेटाडेटा में दिखाई देता है तो गतिशील प्रकार में एक विशेष विशेषता संलग्न (गतिशील) के साथ ऑब्जेक्ट के रूप में लिखा जाता है। अनिवार्य रूप से कहने का प्रकार (गतिशील) अधिकांश उद्देश्यों के लिए टाइपऑफ (ऑब्जेक्ट) से अलग नहीं है।

+2

हाँ बस डीबग किया गया। राइट (टाइपोफ (ट्रेशल्ट)। फुलनाम और यह वास्तव में सिस्टम है। ऑब्जेक्ट। – dkackman

1

किसी विशिष्ट प्रकार के ऑब्जेक्ट के लिए dynamic के रूप में घोषित ऑब्जेक्ट के लिए आवश्यक नहीं है। यह DynamicObject का उप-वर्ग हो सकता है (और इस प्रकार संचालन लुकअप के लिए विशिष्ट तर्क प्रदान करता है), लेकिन यह एक सामान्य वस्तु भी हो सकती है (जैसा कि @ जेरेडपार ने कहा था)।

शायद, अगर आप बताते हैं कि dynamic ऑब्जेक्ट्स के लिए आप किस प्रकार की शाखा बनाना चाहते हैं तो बेहतर समाधान ढूंढना संभव होगा।

+0

कुछ स्पष्टीकरण जोड़ा – dkackman

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