簡體   English   中英

從枚舉數組獲取描述

[英]Getting Description from an array of Enums

我試圖從枚舉數組中獲得基本的描述,這是我目前的結構。

public enum IllinoisNonDisclosureConvictionFormOptions
{
    [Description("625 ILCS 5/11-501 - Driving Under the Influence")]
    answerConviction0 = 0,

    [Description("625 ILCS 5/11-503 - Reckless Driving")]
    answerConviction1 = 1,

    [Description("a violation of Article 11 of the Criminal Code of 1961, not including prostitution under 720 ILCS 5 / 11 - 14")]
    answerConviction2 = 2,

    [Description("720 ILCS 5/26-5 - Dog Fighting")]
    answerConviction3 = 3,

    [Description("720 ILCS 5/12-1 - Assault")]
    answerConviction4 = 4,
}

因此,基本上,用戶將選擇他們所犯罪行,然后將該文本在if語句中與枚舉的描述進行比較。 我目前所擁有的是:

    if (request.Question4 != null)
    {
        var answersForQuestion4 = Enum.GetValues(typeof(IllinoisNonDisclosureConvictionFormOptions)).Cast<IllinoisNonDisclosureConvictionFormOptions>().ToList();
        foreach (Enum answer in answersForQuestion4)
        {
            //I need to compare the description to the selected text
            string description = (enum description value)
            if (request.Question4 == description)
            {return description}
        }

    }

由於我真的不需要將他們的答案保存在數據庫中,因此我可能必須從枚舉切換到ControllersConstants。 如果您對此事有任何見解,請告訴我。

此發布的問題( 從Description屬性獲取枚舉 )包括獲取枚舉描述。

如果您需要相反的說明,並且知道響應必須與您的枚舉描述相匹配,則可以使用Max的答案進行反向操作以獲取枚舉。

您發布的解決方案似乎正在尋找匹配的枚舉名稱(例如answerConviction0),而不是問題中描述的匹配描述。

您可以執行以下操作:

string findMe = "625 ILCS 5/11-503 - Reckless Driving";

Type enumType = typeof(IllinoisNonDisclosureConvictionFormOptions);
Type descriptionAttributeType = typeof(DescriptionAttribute);

foreach (string memberName in Enum.GetNames(enumType))
{
    MemberInfo member = enumType.GetMember(memberName).Single();

    string memberDescription = ((DescriptionAttribute)Attribute.GetCustomAttribute(member, descriptionAttributeType)).Description;

    if (findMe.Equals(memberDescription))
    {
        Console.WriteLine("Found it!");
    }
}

請注意,所有這些反射將很慢。 也許最好使用字符串數組而不是帶有描述的枚舉。

非常感謝您在閱讀完帖子后的積極反饋,我意識到我的錯誤是答案被設置為ENUM而不是INT。 我相信這種代碼格式將給我理想的結果:

if (request.Question4 != null)
{
    var answersForQuestion4 = Enum.GetValues(typeof(IllinoisNonDisclosureConvictionFormOptions)).Cast<IllinoisNonDisclosureConvictionFormOptions>().ToList();
    foreach (int answer in answersForQuestion4)
    {
        string descrip = Enum.GetName(typeof(IllinoisNonDisclosureConvictionFormOptions), answer);
        if(descrip == request.Question4)
        {
            documentModel.Sections.Add(new Section(documentModel, new Paragraph(documentModel, descrip)));
        }
    }
}

這篇文章很有幫助! 從描述屬性獲取枚舉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM