2011-05-03 49 views
9

我有一個結構,看起來像這樣獲取值的集合:從結構的常量性

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

我想以編程方式檢索MYSTRUCT的常量屬性的值的集合。 到目前爲止,我已經試過這個沒有成功:

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

任何有什麼想法?謝謝。

編輯:這是什麼最終爲我工作:

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

謝謝喬納森·亨森和JaredPar您的幫助!

回答

15

這些領域而不是屬性,因此你需要使用GetFields方法

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

此外,我相信你正在尋找的方法GetRawConstantValue而不是GetConstantValue

+0

我知道這是一個老問題/答案,但謝謝。你是第一個指出他們不屬於領域的人。 – James 2012-03-12 21:44:40

2

GetProperties將返回您的屬性。屬性獲取和/或設置方法。

截至目前您的結構沒有任何屬性。如果你想嘗試的屬性:

private const string property1 = "blah blah"; 

public string Property1 
{ 
    get { return property1; } 
} 

此外,你可以使用GetMembers()返回所有的成員,這將在當前的代碼返回你的「屬性」。

+1

您還可以使用屬性設置值,例如: private string property1;公共字符串屬性1 {0} } set {property1 = value; } } 此外,在C#v 3.5及更高版本中,您可以僅僅獲取;並設置;而不實際聲明你的封裝對象。 – 2011-05-03 18:23:58

2

這是一個有點不同的版本,以獲得字符串的實際數組:

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