如何获取静态结构中包含的 const 字符串的自定义属性 class

How to get the custom attribute of a const string contained in struct in static class

我搜索了一个解决方案,通过这个常量字符串的值来获取一个常量字符串的自定义属性。像这个例子:

public static class Directory
{
    public struct Bank01
    {
        [SymbolAttribute("Attribute01")]
        public const string Value01 = "Bank01.Value01";
        [SymbolAttribute("Attribute02")]
        public const string Value02 = "Bank01.Value02";
    }
    public struct Bank02
    {
        [SymbolAttribute("Attribute03")]
        public const string Value01 = "Bank02.Value01";
        [SymbolAttribute("Attribute04")]
        public const string Value02 = "Bank02.Value02";
    }


    public static SymbolAttribute GetSymbolAttribute(string value)
    {
        return typeof(Directory)
            .GetMember(value.Split('.')[0])
            .GetType()
            .GetField(value.Split('.')[1])
            .GetCustomAttribute<SymbolAttribute>();
    }
}

我想像这样使用这个功能:

public static Main()
    {
        SymbolAttribute attribute = GetSymbolAttribute(Directory.Bank01.Value01);
    }

我不明白为什么这个有效:

return typeof(Directory.Bank01)
            .GetField(value.Split('.')[1])
            .GetCustomAttribute<SymbolAttribute>();

这个不行:

return typeof(Directory)
            .GetMember(value.Split('.')[0])
            .GetType()
            .GetField(value.Split('.')[1])
            .GetCustomAttribute<SymbolAttribute>();

你有想法吗?提前谢谢你..

Bank01Bank02不是成员,它们是嵌套的类,所以你应该使用GetNestedType代替。

typeof(Directory)
    .GetNestedType(value.Split('.')[0])
    .GetField(value.Split('.')[1])
    .GetCustomAttribute<SymbolAttribute>();