C# PCL中是否支持GetFields?
我正在尝试实现在中找到的枚举类 在下面的代码中,我得到一个编译错误,C# PCL中是否支持GetFields?,c#,.net-4.5,portable-class-library,C#,.net 4.5,Portable Class Library,我正在尝试实现在中找到的枚举类 在下面的代码中,我得到一个编译错误,GetFields无法解决 public static IEnumerable<T> GetAll<T>() where T : Enumeration { var type = typeof(T); var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.De
GetFields
无法解决
public static IEnumerable<T> GetAll<T>() where T : Enumeration
{
var type = typeof(T);
var fields = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
return fields.Select(info => info.GetValue(null)).OfType<T>();
}
public静态IEnumerable GetAll(),其中T:Enumeration
{
var类型=类型(T);
var fields=type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
返回字段。选择(info=>info.GetValue(null)).OfType();
}
根据,此方法在可移植类库中受支持
我的库针对的是.NET应用商店应用、.NET Framework 4.5和Windows Phone 8
你知道这是怎么回事吗
解决方案
public静态IEnumerable GetAll(),其中T:Enumeration
{
var类型=类型(T);
var fields=type.GetRuntimeFields()。其中(x=>x.IsPublic | | x.IsStatic);
返回字段。选择(info=>info.GetValue(null)).OfType();
}
公共静态IEnumerable GetAll(类型)
{
var fields=type.GetRuntimeFields()。其中(x=>x.IsPublic | | x.IsStatic);
返回字段。选择(info=>info.GetValue(null));
}
仅仅因为一个方法说它在可移植类库中受支持,并不意味着它对所有可能的目标都受支持。如果查看的帮助,它将列出每个成员并显示每个受支持系统的图标
在这种情况下,您会注意到,GetFields
旁边没有绿色购物袋图标-它在Windows应用商店应用程序中不受支持,因此只要您将Windows应用商店包括在PCL支持的目标集中,它就不可用
另一种方式是,在方法的版本信息块中,如果Windows应用商店支持这些方法,则会有一个特定的部分介绍它们。比较:
.NET框架支持:4.5、4、3.5、3.0、2.0
.NET Framework客户端配置文件
在:4、3.5 SP1中支持
可移植类库
支持:可移植类库
.NET for Windows应用商店应用程序
在Windows 8中受支持
到 .NET框架
支持:4.5、4、3.5、3.0、2.0、1.1、1.0
.NET Framework客户端配置文件
在:4、3.5 SP1中支持
可移植类库
支持:可移植类库
对于Windows应用商店应用程序,为了进行反射,您应该切换到使用该类-但请注意,它仍然不支持
GetFields
方法。要添加到Damien的答案中,在.Net For Windows应用商店应用程序中,您可以使用以下扩展方法:
using System.Reflection;
var fields = type.GetRuntimeFields();
这似乎相当于.Net Framework的GetFields
方法
此方法返回指定类型上定义的所有字段,
包括继承字段、非公共字段、实例字段和静态字段
有关这里发生的事情以及原因的详细信息,请参阅此答案:感谢您的详细解释。。。这澄清了正在发生什么的问题。
using System.Reflection;
var fields = type.GetRuntimeFields();