静态类到Dictionary在c#

本文关键字:string 静态类 Dictionary | 更新日期: 2023-09-27 18:11:48

我有一个静态类,它只包含字符串属性。我想把这个类转换成一个包含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

它没有读取任何属性-谁能告诉我我的代码出了什么问题?

静态类到Dictionary<string, string>在c#

Colors类中的成员不是属性而是字段。

使用GetFields代替GetProperties方法

你可能会得到这样的结果(也不是对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);
                }

您可以使用linq将转换压缩为几行:

var type = typeof(Colors);
var fields = type.GetFields().ToDictionary(f => f.Name, f => f.GetValue(f).ToString());

使用

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