2011-05-03 2 views
9

J'ai une struct qui ressemble à ceci:Get collection de valeurs des propriétés de const struct

public struct MyStruct 
{ 
    public const string Property1 = "blah blah blah"; 
    public const string Property2 = "foo"; 
    public const string Property3 = "bar"; 
} 

Je veux récupérer programme une collection de valeurs de propriétés const de myStruct. Jusqu'à présent, j'ai essayé ceci sans succès:

var x = from d in typeof(MyStruct).GetProperties() 
        select d.GetConstantValue(); 

Quelqu'un a des idées? Merci.

EDIT: Voici ce qui a finalement fonctionné pour moi:

from d in typeof(MyStruct).GetFields() 
select d.GetValue(new MyStruct()); 

Merci Jonathan Henson et JaredPar pour votre aide!

Répondre

15

Ces champs sont pas des propriétés et, par conséquent, vous devez utiliser la méthode GetFields

var x = from d in typeof(MyStruct).GetFields() 
      select d.GetRawConstantValue(); 

Aussi je crois que vous êtes à la recherche de la méthode GetRawConstantValue au lieu de GetConstantValue

+0

Je sais que c'est une vieille question/réponse mais merci. Vous êtes la première personne à faire remarquer que ce sont des champs et non des propriétés. – James

2

GetProperties renverra vos propriétés. Les propriétés ont et/ou définissent des méthodes.

Pour l'instant, votre structure n'a aucune propriété. Si vous voulez essayer des propriétés:

private const string property1 = "blah blah"; 

public string Property1 
{ 
    get { return property1; } 
} 

En outre, vous pouvez utiliser GetMembers retourner tous vos membres(), ce renverrait vos « propriétés » dans votre code actuel.

+1

Vous pouvez également définir des valeurs avec une propriété telle que: private string property1; chaîne publique Propriété1 { get {return property1; } set {property1 = valeur; } } Aussi, en C# v 3.5 et plus tard, vous pouvez simplement faire; Et mettre; sans réellement déclarer votre objet encapsulé. –

2

est ici un peu différent la version pour obtenir le tableau actuel de chaînes:

string[] myStrings = typeof(MyStruct).GetFields() 
        .Select(a => a.GetRawConstantValue() 
        .ToString()).ToArray(); 
Questions connexes