Я пытаюсь реализовать класс перечисления, найденный в 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>();
}
Согласно http://msdn.microsoft.com/en-us/library/ch9714z3(v=vs.110).aspx, этот метод поддерживается в портативных библиотеках классов.
Моя библиотека предназначена для .NET для приложений 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));
}