سؤال

أريد إنشاء الأسلوب الذي يأخذ في Enum نوع إرجاع كافة أعضاء في مجموعة, كيفية إنشاء مثل هذه الوظيفة ؟

خذ على سبيل المثال لدي هذين enums:

public enum Family
{ 
   Brother,
   Sister,
   Father
}

public enum CarType
{ 
   Volkswagen,
   Ferrari,
   BMW
}

كيفية إنشاء دالة GetEnumList بحيث يعود

  1. {Family.Brother, Family.Sister, Family.Father} بالنسبة للحالة الأولى.
  2. {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();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top