2011-05-03 10 views
9

que tengo una estructura que se parece a esto:colección de valores de las propiedades de const struct

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

Quiero recuperar mediante programación un conjunto de valores de las propiedades de myStruct const. Hasta ahora no ha intentado esto sin éxito:

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

Alguien tiene alguna idea? Gracias.

EDITAR: Esto es lo que finalmente funcionó para mí:

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

Gracias Jonathan Henson y JaredPar por toda su ayuda!

Respuesta

15

Estos son campos no propiedades y por lo tanto es necesario utilizar el GetFields método

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

También creo que usted está buscando el método GetRawConstantValue en lugar de GetConstantValue

+0

Sé que esta es una vieja pregunta/respuesta, pero gracias. Eres la primera persona en señalar que son campos, no propiedades. – James

2

GetProperties devolverá sus Propiedades. Las propiedades tienen métodos get y/o set.

Hasta el momento su estructura no tiene propiedades. Si quieres tratan propiedades:

private const string property1 = "blah blah"; 

public string Property1 
{ 
    get { return property1; } 
} 

Por otra parte, se puede utilizar GetMembers() para devolver todos sus miembros, esto sería volver a sus "propiedades" en el código actual.

+1

también puede establecer valores con una propiedad como: cadena privada propiedad1; cadena pública Propiedad1 { get {return property1; } conjunto {propiedad1 = valor; } } Además, en C# v 3.5 y posterior, puede hacer get; y establecer; sin declarar realmente su objeto encapsulado. –

2

Esto es una versión poco diferente para obtener la matriz real de cadenas:

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