【问题标题】:Get custom attributes of enum value [duplicate]获取枚举值的自定义属性[重复]
【发布时间】:2012-05-24 06:14:55
【问题描述】:

在 WinRT .NET 应用程序 (C#) 中,我想获取在枚举值上定义的自定义属性。以下面的枚举为例:

public enum MyEnum
{
    [Display(Name="Foo")]
    EnumValue1,

    [Display(Name="Bar")]
    EnumValue2
}

现在在“普通”.NET 中,我知道我可以使用 enumValue.GetType().GetMember(enumValue.ToString()) 获取枚举值的自定义属性。

不幸的是,在 WinRT .NET 中,GetMember() 方法在 Type 类上不可用。
有什么建议吗?

================================================ ======

感谢下面的 Marc,我找到了答案! 以下代码用于从 .NET 4.5 WinRT 中的枚举值获取特定的自定义属性:

public static class EnumHelper
{
    public static T GetAttribute<T>(this Enum enumValue)
        where T : Attribute
    {
        return enumValue
            .GetType()
            .GetTypeInfo()
            .GetDeclaredField(enumValue.ToString())
            .GetCustomAttribute<T>();
    }
}

【问题讨论】:

  • 请不要在您的标题前加上“WinRT C#:”之类的前缀。这就是标签的用途。
  • 那不可能。 Type.GetMember 仍然存在于 .Net 4.5 中!
  • @logicnp:WinRT API 是完整 .NET API 的子集。
  • 不,它没有在 System 命名空间中的 Type 类上定义。配置:Windows Consumer Preview、VS11 Beta、Assembly C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.dll
  • @JonSkeet:我的错!但是,除了通过 Intellisense/编译时错误外,如何知道 API 是否存在于 WinRT 中。 API 文档页面 msdn.microsoft.com/en-us/library/… 没有像 Silverlight 那样的 WinRT 过滤器。

标签: c# .net attributes windows-runtime


【解决方案1】:

与其寻找成员,不如专门寻找字段。如果在 WinRT 中的 Type 上不可用,请添加 using System.Reflection; 并使用 type.GetTypeInfo() 并查看那里,因为各种反射方面已移至类型信息。

【讨论】:

  • 谢谢,成功了!我用答案补充了我上面的问题。
猜你喜欢
  • 2011-07-03
  • 1970-01-01
  • 2013-06-28
  • 2020-07-19
  • 2016-07-07
  • 2018-02-06
  • 2010-12-20
相关资源
最近更新 更多