2010-04-07 7 views
0

J'ai déclaré la classe suivante. J'ai besoin de récupérer la structure de classe et les valeurs statiques sans l'instancier.GetValue sur un champ statique à l'intérieur de classes imbriquées

public class MyClass() 
{ 
    public static string field = "Value"; 

    public class nestedClass() 
    { 
     public static string nestedField = "NestedValue"; 
    } 
} 

Je l'ai utilisé avec succès GetFields et GetNestedType pour récupérer la structure de classe et GetValue (null) fonctionne très bien sur le terrain, mais pas sur nestedField. Permettez-moi échantillon:

var fi = typeof(MyClass).GetField("field", BindingFlags.Public | BindingFlags.Static); 
var nt = typeof(MyClass).GetNestedType("nestedClass", BindingFlags.Public); 
var nfi = nt.GetField("nestedField", BindingFlags.Public | BindingFlags.Static); 
// All the above references are detected correctly 
var value = fi.GetValue(null); // until here everything works fine. value == "Value" 
var nestedValue = nfi.GetValue(null); // this one does not work!! 

Tout le monde sait pourquoi la dernière ligne ne fonctionne pas et comment travailler autour? Merci.

+4

Veuillez fournir un code court mais * complet *. Actuellement, vous n'avez pas de classe imbriquée - vous avez une * méthode * appelée 'nestedClass'. Si vous pouvez nous fournir quelque chose que nous pouvons couper, coller et analyser, cela nous aidera beaucoup. –

+0

Il serait utile de savoir quelle exception vous obtenez. Cela peut être un problème de sécurité du code par exemple. – Robert

Répondre

0

Eh bien, tout semble bien fonctionner pour moi et après la dernière ligne, je reçois la chaîne "NestedValue". Essayé sur les frameworks .net 3.5, 4 et 4.5, tout fonctionne (VS2012 Pro). ReSharper affirme cependant que fi, et nfi pourraient être une référence nulle possible.

MyClass public class() {

Ne mettez pas "()" à la fin de votre classe, ce code est encore au stade expérimental, et il est redondant, sauf si vous voulez utiliser la code expérimental, alors vous devrez fournir quelques arguments au constructeur.

Questions connexes