2

文字列プロパティのみを含む静的クラスがあります。key=PropNameそのクラスを、、の名前と値のペアの辞書に変換したいと思いvalue=PropValueます。

以下は私が書いたコードです:

void Main()
{
            Dictionary<string, string> items = new Dictionary<string, string>();
                var type = typeof(Colors);
                var properties = type.GetProperties(BindingFlags.Static);

                /*Log  properties found*/
                            /*Iam getting zero*/
                Console.WriteLine("properties found: " +properties.Count());

                foreach (var item in properties)
                {
                    string name = item.Name;
                    string colorCode = item.GetValue(null, null).ToString();
                    items.Add(name, colorCode);
                }

                /*Log  items created*/
                Console.WriteLine("Items  in dictionary: "+items.Count());
}

    public static class Colors
    {
        public static  string Gray1 = "#eeeeee";
        public static string Blue = "#0000ff";
    }

出力

properties found: 0
Items  in dictionary: 0

プロパティを読み取っていません-誰かが私のコードの何が問題になっているのか教えてもらえますか?

4

3 に答える 3

4

Colorsクラスのメンバーはプロパティではなくフィールドです。

GetFieldsGetPropertiesメソッドの代わりに使用します。

次のような結果になる可能性があります(への呼び出しの変更でもありませんGetValue):

                var properties = type.GetFields(BindingFlags.Static);

                /*Log  properties found*/
                            /*Iam getting zero*/
                Console.WriteLine("properties found: " +properties.Count());

                foreach (var item in properties)
                {
                    string name = item.Name;
                    string colorCode = item.GetValue(null).ToString();
                    items.Add(name, colorCode);
                }
于 2011-10-18T14:20:31.873 に答える
4

linqを使用して、変換を数行に凝縮できます。

var type = typeof(Colors);
var fields = type.GetFields().ToDictionary(f => f.Name, f => f.GetValue(f).ToString());
于 2011-10-18T14:32:09.600 に答える
0

これを使って:

var properties = type.GetFields(BindingFlags.Static|BindingFlags.Public);
于 2011-10-18T14:21:27.690 に答える