获取公共领域?

时间:2010-10-10 00:04:12

标签: c# reflection

我有一个像这样定义的结构

private struct Combinators
{
    public const char DirectChild = '>';
    public const char NextAdjacent = '+';
    public const char NextSiblings = '~';
    public const char Descendant = ' ';
}

我想使用反射来获取结构中public const char字段的所有值的列表(尽可能具体)。我怎么能这样做?

2 个答案:

答案 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存在?