[英]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.