我遇到了如下情况:
enum Header
{
Sync,
[OldProtocol] Keepalive,
Ping,
[OldProtocol] Auth,
[OldProtocol] LoginData
//...
}
我需要获取定义了 OldProtocolAttribute
的元素数组。我注意到 Attribute.IsDefined()
方法及其重载显然不支持这种情况。
我的问题是:
- 有没有办法在解决方案的任何部分不使用
typeof(Header).GetField()
的情况下解决问题? - 如果不是,解决它的最佳方法是什么?
最佳答案
据我所知,您必须从字段中获取属性。你会使用:
var field = typeof(Header).GetField(value.ToString());
var old = field.IsDefined(typeof(OldProtocolAttribute), false);
或者获取整个数组:
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();
显然,如果您经常需要这样做,您可能希望缓存结果。
关于C# - 检查属性是否存在于枚举的元素上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8771401/