我在这里可能真的很蠢。
我已经更新了我的解决方案以开始使用.NET 4.6。我的一个PCL项目对枚举进行了一些反思。我更新了PCL兼容性,并修复了它创建的空project.json文件。但是,此PCL项目不再构建,因为它无法识别Type.GetMember()
或MemberInfo[x].GetCustomAttribute(...)
我一直在使用并且一直工作到今天的代码是:
MemberInfo[] info = e.GetType().GetMember(e.ToString());
if (info != null && info.Length > 0)
{
object[] attributes = info[0].GetCustomAttributes(typeof(Description), false);
if (attributes != null && attributes.Length > 0)
return ((Description)attributes[0]).Text;
}
return e.ToString();
项目仅引用位于以下路径中的.NET库:
C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETPortable \ v4.5 \ Profile \ Profile7 \
该项目也自动支持Xamarin平台,作为PCL配置的一部分。
任何想法都会受到高度赞赏。
答案 0 :(得分:5)
好的,所以这需要一段时间(忘记它甚至是一个问题!!)
然而,上面的评论指出了我正确的方向,有一个大问题是它试图给我属性类(主枚举)而不是枚举元素本身。上面评论中的链接让我在第一行代码中使用GetTypeInfo
,这必须替换为GetRuntimeField
一个小小的调整意味着我最终得到了以下几点:
public static string ToDescription(this ArtistConnection e)
{
var info = e.GetType().GetRuntimeField(e.ToString());
if (info != null)
{
var attributes = info.GetCustomAttributes(typeof(Description), false);
if (attributes != null)
{
foreach (Attribute item in attributes)
{
if (item is Description)
return (item as Description).Text;
}
}
}
return e.ToString();
}