use*_*567 11 c# enums attributes elements defined
我有以下情况:
enum Header
{
Sync,
[OldProtocol] Keepalive,
Ping,
[OldProtocol] Auth,
[OldProtocol] LoginData
//...
}
Run Code Online (Sandbox Code Playgroud)
我需要获取一个OldProtocolAttribute定义了元素的数组.我注意到该Attribute.IsDefined()方法及其重载显然不支持这种情况.
我的问题是:
typeof(Header).GetField()?Jon*_*eet 20
据我所知,你必须从字段中获取属性.你用的是:
var field = typeof(Header).GetField(value.ToString());
var old = field.IsDefined(typeof(OldProtocolAttribute), false);
Run Code Online (Sandbox Code Playgroud)
或者获得整个数组:
var attributeType = typeof(OldProtocolAttribute);
var array = typeof(Header).GetFields(BindingFlags.Public |
BindingFlags.Static)
.Where(field => field.IsDefined(attributeType, false))
.Select(field => (Header) field.GetValue(null))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
显然,如果你经常需要这个,你可能想要缓存结果.
反射几乎是您唯一可用的工具。查询还不错:
var oldFields = typeof(Header).GetFields(BindingFlags.Static | BindingFlags.Public).Select(field => Attribute.IsDefined(field, typeof(OldProtocolAttribute)));
Run Code Online (Sandbox Code Playgroud)