我有一个像这样定义的结构
private struct Combinators
{
public const char DirectChild = '>';
public const char NextAdjacent = '+';
public const char NextSiblings = '~';
public const char Descendant = ' ';
}
我想使用反射来获取结构中public const char
字段的所有值的列表(尽可能具体)。我怎么能这样做?
答案 0 :(得分:7)
var fieldValues = typeof(Combinators)
.GetFields()
.Where(x => x.FieldType == typeof(char) && x.IsLiteral)
.ToDictionary(x => x.Name, x => (char)x.GetValue(null));
返回Dictionary<string, char>
,其中键是字段名称,值是字段值(作为字符)。
更新:根据评论和@ nasufara的建议添加了where子句,并添加了基于@Jeff M的IsLiteral
检查。
答案 1 :(得分:0)
private class TypedEnum<T> : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator()
{
return GetType().GetFields().Select(f => f.GetValue(null)).OfType<T>().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
private class Combinators : TypedEnum<char>
{
public const char DirectChild = '>';
public const char NextAdjacent = '+';
public const char NextSiblings = '~';
public const char Descendant = ' ';
}
编辑: Blah ......有没有办法让静态IEnumerable存在?