2010-01-15 12 views
6

nel mio codice utilizzando riflessioni che ho scrittoVersione implicita di IsAssignableFrom?

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

Ho una classe che ha una conversione implicita in stringhe. Tuttavia la dichiarazione di cui sopra non la cattura. Come posso rendere reflection/the above se l'istruzione cattura le stringhe e le classi con la conversione stringa implicita? invece di stringhe specifiche e ogni classe di cui sono a conoscenza?

risposta

7

vorrei utilizzare un metodo di estensione che ottiene tutti i metodi statici pubblici e controlli per un metodo con il nome corretto e tipo di ritorno.

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

Sì. Gli operatori di conversione implicita sono solo zucchero sintattico. Non hanno alcun significato speciale per il CLR e VB.NET non li capisce nemmeno (o almeno non lo ha fatto in passato). Non è un vero cast, e quindi non è veramente assegnabile; l'unica risposta è verificare effettivamente l'operatore implicito. – Aaronaught

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

Il problema è che sembra convertire TUTTO in stringa. Comprese le classi non implicite. Il fatto che converta le classi in una stringa rovina il mio codice. –

+0

Per definizione, TUTTI gli oggetti implementano un metodo ToString(). – Curt