2010-01-15 11 views
6

मेरे कोड का उपयोग कर विचार में मैंIsAssignableFrom का लागू संस्करण?

if (f.FieldType.IsAssignableFrom("".GetType())) 

लिखा था मैं एक वर्ग तार करने के लिए एक अंतर्निहित रूपांतरण है कि है। हालांकि उपरोक्त अगर कथन इसे पकड़ नहीं लेता है। यदि मैं कथन पकड़ने वाले स्ट्रिंग्स और अंतर्निहित स्ट्रिंग रूपांतरण वाले वर्गों को उपरोक्त प्रतिबिंब/उपरोक्त कैसे बना सकता हूं? विशेष रूप से तारों और प्रत्येक कक्षा के बारे में मुझे पता है?

उत्तर

7

मैं एक विस्तार विधि है जो सही नाम और वापसी प्रकार के साथ एक विधि के लिए सभी सार्वजनिक स्थिर तरीकों और चेक हो जाता है का प्रयोग करेंगे।

public static class TypeExtentions 
{ 
    public static bool ImplicitlyConvertsTo(this Type type, Type destinationType) 
    { 

     if (type == destinationType) 
      return true; 


     return (from method in type.GetMethods(BindingFlags.Static | 
               BindingFlags.Public) 
       where method.Name == "op_Implicit" && 
         method.ReturnType == destinationType 
       select method 
       ).Count() > 0; 
    } 
} 
+3

यूप। लागू रूपांतरण ऑपरेटर सिर्फ वाक्य रचनात्मक चीनी हैं। उनके पास सीएलआर के लिए कोई विशेष अर्थ नहीं है, और वीबी.नेट उन्हें भी समझ में नहीं आता है (या कम से कम यह अतीत में नहीं था)। यह एक असली कलाकार नहीं है, और इसलिए यह वास्तव में असाइन करने योग्य नहीं है; एकमात्र जवाब वास्तव में निहित ऑपरेटर की जांच करना है। – Aaronaught

0
if(... || TypeDescriptor.GetConverter(f).CanConvertTo("".GetType())) 
+0

समस्या यह है कि ऐसा लगता है कि यह स्ट्रिंग के लिए सब कुछ बदलता है। गैर निहित कक्षाओं सहित। तथ्य यह वर्गों को एक स्ट्रिंग में परिवर्तित करता है जो मेरे कोड को खंडित करता है। –

+0

परिभाषा के अनुसार, सभी ऑब्जेक्ट्स ToString() विधि को लागू करते हैं। – Curt

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