[c#] كيفية الحصول على وصف التعداد C # من القيمة؟



Answers

لقد قمت بتطبيق هذا بطريقة عامة آمنة من النوع في Melodystrained Melody - يمكنك استخدام:

string description = Enums.GetDescription((MyEnum)value);

هذه:

  • يضمن (مع قيود النوع العام) أن القيمة هي قيمة تعداد
  • يتجنب الملاكمة في الحل الحالي
  • يخبئ كل الأوصاف لتجنب استخدام التأمل في كل مكالمة
  • لديه مجموعة من الأساليب الأخرى ، بما في ذلك القدرة على تحليل القيمة من الوصف

أدرك أن الإجابة الأساسية كانت فقط من فريق البحث إلى MyEnum ، ولكن إذا كنت تقوم بالكثير من أعمال التعداد ، فيجب التفكير في استخدام Unconstrained Melody :)

Question

ممكن تكرار:
الحصول على سمات قيمة التعداد

لدي تعداد مع سمات الوصف مثل هذا:

public enum MyEnum
{
    Name1 = 1,
    [Description("Here is another")]
    HereIsAnother = 2,
    [Description("Last one")]
    LastOne = 3
}

لقد عثرت على هذا الجزء من الشفرة لاسترداد الوصف استنادًا إلى التعداد

public static string GetEnumDescription(Enum value)
{
    FieldInfo fi = value.GetType().GetField(value.ToString());

    DescriptionAttribute[] attributes =
        (DescriptionAttribute[])fi.GetCustomAttributes(
        typeof(DescriptionAttribute),
        false);

    if (attributes != null &&
        attributes.Length > 0)
        return attributes[0].Description;
    else
        return value.ToString();
}

هذا يتيح لي كتابة التعليمات البرمجية مثل:

var myEnumDescriptions = from MyEnum n in Enum.GetValues(typeof(MyEnum))
                         select new { ID = (int)n, Name = Enumerations.GetEnumDescription(n) };

ما أريد القيام به هو إذا كنت أعرف قيمة التعداد (مثل 1) - كيف يمكنني استرداد الوصف؟ بمعنى آخر ، كيف يمكنني تحويل عدد صحيح إلى "قيمة التعداد" لتمريرها إلى طريقة GetDescription الخاصة بي؟




لجعل هذا أسهل في الاستخدام ، كتبت ملحق عام:

public static string ToDescription<TEnum>(this TEnum EnumValue) where TEnum : struct
{
    return Enumerations.GetEnumDescription((Enum)(object)((TEnum)EnumValue));
}

الآن أستطيع أن أكتب:

        MyEnum my = MyEnum.HereIsAnother;
        string description = my.ToDescription();
        System.Diagnostics.Debug.Print(description);

ملاحظة: استبدل "التعدادات" أعلاه باسم الفصل الخاص بك




Related



Tags

c# c#   enums