سؤال

أنا أبحث عن مكتبة مفتوحة المصدر أو أمثلة على العمل مع أنواع التعداد في .صافي.بالإضافة إلى الملحقات القياسية التي يستخدمها الناس من أجل Enums (TypeParse ، الخ) ، أنا بحاجة إلى طريقة أداء العمليات مثل إعادة قيمة وصف سمة معينة قيمة التعداد أو إرجاع قيمة التعداد الذي وصف قيمة السمة التي تطابق سلسلة معينة.

على سبيل المثال:

//if extension method
var race = Race.FromDescription("AA") // returns Race.AfricanAmerican
//and
string raceDescription = Race.AfricanAmerican.GetDescription() //returns "AA"
هل كانت مفيدة؟

المحلول

إذا لم يكن هناك واحد بالفعل ، تبدأ واحدة!ربما يمكنك أن تجد جميع طرق تحتاجه من إجابات أخرى هنا على ستاكوفيرفلوو - مجرد لفة لهم في مشروع واحد.وهنا عدد قليل للحصول على أنك بدأته:

الحصول على قيمة التعداد وصف:

public static string GetDescription(this Enum value)
{
    FieldInfo field = value.GetType().GetField(value.ToString());
    object[] attribs = field.GetCustomAttributes(typeof(DescriptionAttribute), true));
    if(attribs.Length > 0)
    {
        return ((DescriptionAttribute)attribs[0]).Description;
    }
    return string.Empty;
}

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

public static class EnumUtils
{
    public static Nullable<T> Parse<T>(string input) where T : struct
    {
        //since we cant do a generic type constraint
        if (!typeof(T).IsEnum)
        {
            throw new ArgumentException("Generic Type 'T' must be an Enum");
        }
        if (!string.IsNullOrEmpty(input))
        {
            if (Enum.GetNames(typeof(T)).Any(
                  e => e.Trim().ToUpperInvariant() == input.Trim().ToUpperInvariant()))
            {
                return (T)Enum.Parse(typeof(T), input, true);
            }
        }
        return null;
    }
}

نصائح أخرى

وأنا أقرأ هذا بلوق وظيفة في اليوم الآخر حول استخدام الطبقات بدلا من تتضمن التعدادات:

HTTP: //www.lostechies كوم / بلوق / jimmy_bogard / أرشيف / 2008 / 12/08 / تعداد-classes.aspx

ويقترح استخدام فئة مجردة لتكون بمثابة أساس الطبقات التعداد. الفئة الأساسية لديها أشياء مثل المساواة وتحليل ومقارنة وغيرها.

واستخدامه، هل يمكن أن يكون فصلا لتتضمن التعدادات الخاصة بك مثل هذا (على سبيل المثال مأخوذ من المادة):

public class EmployeeType : Enumeration
{
    public static readonly EmployeeType Manager 
        = new EmployeeType(0, "Manager");
    public static readonly EmployeeType Servant 
        = new EmployeeType(1, "Servant");
    public static readonly EmployeeType AssistantToTheRegionalManager 
        = new EmployeeType(2, "Assistant to the Regional Manager");

    private EmployeeType() { }
    private EmployeeType(int value, string displayName) : base(value, displayName) { }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top