mat*_*uma 9 c# portable-class-library .net-4.5
我正在尝试实现在https://github.com/jbogard/presentations/blob/master/WickedDomainModels/After/Model/Enumeration.cs中找到的枚举类.
在以下代码中,我收到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>();
}
Run Code Online (Sandbox Code Playgroud)
根据http://msdn.microsoft.com/en-us/library/ch9714z3(v=vs.110).aspx,便携式类库支持此方法.
我的库的目标是.NET for Windows Store应用程序,.NET Framework 4.5和Windows Phone 8.
知道这里发生了什么吗?
public static IEnumerable<T> GetAll<T>() where T : Enumeration
{
var type = typeof(T);
var fields = type.GetRuntimeFields().Where(x => x.IsPublic || x.IsStatic);
return fields.Select(info => info.GetValue(null)).OfType<T>();
}
public static IEnumerable GetAll(Type type)
{
var fields = type.GetRuntimeFields().Where(x => x.IsPublic || x.IsStatic);
return fields.Select(info => info.GetValue(null));
}
Run Code Online (Sandbox Code Playgroud)
dca*_*tro 11
要添加Damien的答案,在.Net for Windows Store Apps中,您可以使用以下扩展方法:
using System.Reflection;
var fields = type.GetRuntimeFields();
Run Code Online (Sandbox Code Playgroud)
这似乎相当于GetFields.Net Framework 的方法.
此方法返回在指定类型上定义的所有字段,包括继承,非公共,实例和静态字段.
仅仅因为一个方法表明它在Portable Class Libraries中受支持并不意味着它支持所有可能的目标.如果您查看Type该类的帮助,它会列出每个成员并显示每个受支持系统的图标.
在这种情况下,你会发现,有没有环保购物袋旁边的图标GetFields-它不是在Windows应用商店中的应用程序的支持,所以只要你有Windows应用商店在您所设定的PCL支持的目标,也将无法使用.
另一种方法是 - 在方法的版本信息块中,如果Windows Store支持它们,则会有一个特定的部分说明它.比较GetGenericTypeDefinition:

.NET Framework
受以下版本支持:4.5,4,3.5,3.0,2.0
.NET Framework Client Profile
受以下版本支持:4,3.5 SP1
可移植类库
受以下版本支持:可移植类库
.NET for Windows应用商店应用程序
受以下版本支持:Windows 8

.NET Framework
受以下版本支持:4.5,4,3.5,3.0,2.0,1.1,1.0
.NET Framework Client Profile
受以下版本支持:4,3.5 SP1
可移植类库
受以下版本支持:可移植类库
对于Windows应用商店应用,对于反射,您应该切换到使用TypeInfo该类 - 但请注意,它仍然没有,特别是,支持该GetFields方法.
| 归档时间: |
|
| 查看次数: |
2708 次 |
| 最近记录: |