开发者

Get public fields?

I've got a struct defined like this

private str开发者_运维百科uct Combinators
{
    public const char DirectChild = '>';
    public const char NextAdjacent = '+';
    public const char NextSiblings = '~';
    public const char Descendant = ' ';
}

I want to use reflection to get a list of all the values of the public const char fields in the struct (as specific as possible). How can I do that?


var fieldValues = typeof(Combinators)
    .GetFields()
    .Where(x => x.FieldType == typeof(char) && x.IsLiteral)
    .ToDictionary(x => x.Name, x => (char)x.GetValue(null));

Returns a Dictionary<string, char> where the key is the field name, and the value is the field value (as a character).

Update: Added where clause based on comments and @nasufara's suggestion, and added IsLiteral check based on @Jeff M's.


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 = ' ';
}

Edit: Blah... there's no way to make a static IEnumerable is there?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜