C# - 检查属性是否存在于枚举的元素上

标签 c# attributes enums elements defined

我遇到了如下情况:

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/

相关文章:

c# - Windows 窗体应用程序中的图像质量差(无 AA)

python - 通过 BeautifulSoup 返回 RSS 属性值

jquery - 如何跨浏览器检测 jQuery 中具有 'required' 属性的输入字段?

c - 多个文件共享的 C 头文件中的枚举

c# - Auth0 LoginResult 无法加载 Newtonsoft.Json 10.0.0.0

c# - 使用基本身份验证从 Controller 重定向到外部 url

c# - DropDownListFor optionLabel null 给出 "call is ambiguous"

python - 是否可以在 python 中向导入的类添加属性?

Typescript Map<enum, set<enum>> "No overload matches this call",但我不明白为什么?

java - 枚举的 vaadin 本地化