2013-09-25 4 views
0

Puis-je obtenir le type d'un champ? Type.GetType(); ne renvoie que le type d'une instance, donc si le champ est null je ne peux pas obtenir le type.Obtention du type de champ (aucune instance)

Note: Je préférerais ne pas utiliser des réflexions ~

+0

null n'est pas un type .. sa valeur. Le champ est toujours le même type indépendamment. Vous devriez vérifier null avant. –

Répondre

1

Selon le contexte GetProperty et PropertyType peut travailler pour vous. C'est à dire. Si vous avez un type d'objet et un nom de propriété:

var typeOfLength = typeof(String).GetProperty("Length").PropertyType; 
0

Il n'est pas clair si vous voulez seulement le type de temps de compilation lorsque le champ est nul. Une méthode simple comme cela pourrait fonctionner:

public static class ReflectionExtensions 
{ 
    public static Type GetCompileTimeType<T>(this T obj) 
    { 
     return typeof(T); 
    } 
} 

Vous pouvez modifier ce vérifier nul et retourner le type réel si c'est ce que vous voulez. utilisation

:

class A { } 
class B : A { } 

class C 
{ 
    private A a1, a2; 
    public C() 
    { 
     a2 = new B(); 
     Console.WriteLine(a1.GetCompileTimeType()); // null but prints A 
     Console.WriteLine(a2.GetCompileTimeType()); // actually a B but prints A 
    } 
} 
0
public class test 
{ 
    private int fTestInt; 
    private string fTestString; 
} 

Vous pouvez obtenir obtenir le type de champ en tapant fTestInt.GetType().

Si vous voulez une validation de type rapide, vous pouvez utiliser.

if (fTestInt is int) 
{ 
    Console.Write("I'm an int!"); 
} 

Vous ne savez pas si c'est ce que vous demandez. Votre question semble partielle.

0

Pourquoi ne pas demander si c'est null?

if (Type != null) 
{ 
    return Type.GetType().Name; 
} 
else 
{ 
    return ""; 
} 
Questions connexes