静态类到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
它没有读取任何属性-谁能告诉我我的代码出了什么问题?
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);