【发布时间】: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