سؤال
أريد إنشاء الأسلوب الذي يأخذ في Enum
نوع إرجاع كافة أعضاء في مجموعة, كيفية إنشاء مثل هذه الوظيفة ؟
خذ على سبيل المثال لدي هذين enums:
public enum Family
{
Brother,
Sister,
Father
}
public enum CarType
{
Volkswagen,
Ferrari,
BMW
}
كيفية إنشاء دالة GetEnumList
بحيث يعود
{Family.Brother, Family.Sister, Family.Father}
بالنسبة للحالة الأولى.{CarType.Volkswagen, CarType.Ferrari, CarType.BMW}
عن الحالة الثانية.
حاولت :
private static List<T> GetEnumList<T>()
{
var enumList = Enum.GetValues(typeof(T))
.Cast<T>().ToList();
return enumList;
}
ولكن لدي InvalidOperationException
:
النظام.InvalidOperationException :لا بد أواخر عمليات لا يمكن أن يؤديها على أنواع أو طرق التي ContainsGenericParameters صحيح.في النظام.انعكاس.RuntimeMethodInfo.ThrowNoInvokeException() في النظام.انعكاس.RuntimeMethodInfo.الاحتجاج(كائن الكائنات ، BindingFlags invokeAttr ، الموثق الموثق ، الكائن[] المعلمات ، CultureInfo الثقافة منطقية skipVisibilityChecks) في النظام.انعكاس.RuntimeMethodInfo.الاحتجاج(كائن الكائنات ، BindingFlags invokeAttr ، الموثق الموثق ، الكائن[] المعلمات ، CultureInfo الثقافة) في النظام.انعكاس.MethodBase.الاحتجاج(كائن الكائنات ، وجوه[] المعلمات)
تحرير:رمز أعلاه تعمل بشكل جيد-- السبب في أنني حصلت على استثناء لأن التعريف تسبب لي علة.شكرا لكم جميعا على الحلول.
المحلول
هنا هو كامل رمز:
public enum Family
{
Brother,
Sister,
Father
}
public enum CarType
{
Volkswagen,
Ferrari,
BMW
}
static void Main(string[] args)
{
Console.WriteLine(GetEnumList<Family>());
Console.WriteLine(GetEnumList<Family>().First());
Console.ReadKey();
}
private static List<T> GetEnumList<T>()
{
T[] array = (T[])Enum.GetValues(typeof(T));
List<T> list = new List<T>(array);
return list;
}
نصائح أخرى
(Family[])Enum.GetValues(typeof(Family))
مثل هذا ؟
private static List<string> GetEnumList<T>()
{
return Enum.GetNames( typeof( T ) )
.Select(s => typeof(T).Name + "." + s).ToList();
}