2009-11-19 3 views
1

Je travaille sur certaines routines de sérialisation, et j'ai besoin d'un moyen d'obtenir le type d'une matrice d'entrée.Obtenir le type de tableau vide

Disons que j'ai l'objet suivant:

class myclass { 
    public int foo; 
    public byte[] bar; 
} 

Maintenant, je peux obtenir le type de myclass.foo en utilisant GetType(). Et si je dis que "myclass.bar = new byte[0]", je peux en déduire que bar est un tableau d'octets en utilisant GetElementType(), HasElementType, et IsArray.

Cependant, si je ne mets jamais bar et que je le laisse comme null, je ne trouve pas un moyen d'extraire les informations de type de l'objet. Si je fais myclass.foo.GetType() tout ce que je reçois est une valeur nulle.

Est-il possible de déduire le type de "barre" dans ce cas?

+0

est ici un poste lié sur le SO: http://stackoverflow.com/questions/1120839/net-c-reflection-list-the-fields-of-a -field-that-itself-has-fields –

Répondre

5

Un objet inexistant n'a pas de type. Cela n'a aucun sens d'obtenir le type d'une référence null. Ce que vous cherchez est en fait le type de champ. Vous pouvez obtenir cela en réfléchissant sur le type déclarant le champ (dans ce cas, myclass).

4

Je pense que la réflexion devrait fonctionner -

typeof(myclass).GetField("bar").FieldType 
+0

Cela ne fonctionne pas. Vous obtenez une exception de référence nulle. – Joseph

+3

Je ne reçois pas une exception NullReferenceException avec ce code, et vous ne devriez pas (sauf si le champ n'existe pas, auquel cas Type.GetField (string) renverra null, mais tant que vos noms sont corrects, vous ne devriez pas obtenir une exception NullReferenceException). – jonp

+0

La méthode de dsolimano devrait fonctionner, la référence de MSDN a quelque chose de similaire: http://msdn.microsoft.com/en-us/library/t0cs7xez.aspx –