我有一个类,
public static class Permissions
{
public const string AccessRightFormAdmin = "TEST1";
public const string AccessRightExperimental = "TEST2";
}
我想List<string> myConsts = new List<string>;
这样,myConsts
包含Permissions
类中的所有字符串常量。如何在 C# 中实现此目的?
如果要避免手动维护myConsts
集合,则必须使用反射。
public readonly List<string> myConsts =
typeof(Permissions)
.GetFields()
.Select(x => x.GetValue(null).ToString())
.ToList();
这将查看Permissions
类型,选择所有公共字段,然后将这些 FieldInfo 中的值提取到新集合中。
而不是字符串,最好使用 KeyValuePair,这样常量可以像枚举一样使用。
List<KeyValuePair<string,string>> consts = typeof(Permission).GetFields()
.Select(p => new KeyValuePair<string,string> ( p.Name, (string)p.GetValue(null))).ToList();
结果
AccessRightFormAdmin TEST1
AccessRightExperimental TEST2