Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PCL中是否支持GetFields?_C#_.net 4.5_Portable Class Library - Fatal编程技术网

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();