[英]Casting enum value to int when binding to dropdown using reflection
我有一些將枚舉綁定到下拉列表的代碼,但是,我希望構建下拉列表,以從枚舉中獲取整數值作為文本的值和description屬性。
我嘗試將kvPairList定義為int / string並強制轉換enumValue和(int)我也嘗試過conversion.toInt32
有想法嗎?
<select name="DropDownList1" id="DropDownList1">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3/option>
</select
枚舉:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace constants
{
public enum Options : int
{
[Description("Option 1")]
Option1 = 1,
[Description("Option 2")]
Option2 = 3,
[Description("Option 3")]
Option3 = 3
}
}
類:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.ComponentModel;
using System.Reflection;
public class EnumDescription
{
public static string GetDescription(System.Enum value)
{
FieldInfo FieldInfo = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])FieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if ((attributes.Length > 0))
return attributes[0].Description;
else
return value.ToString();
}
public static List<KeyValuePair<string, string>> GetValuesAndDescription(System.Type enumType)
{
List<KeyValuePair<string, string>> kvPairList = new List<KeyValuePair<string, string>>();
foreach (System.Enum enumValue in System.Enum.GetValues(enumType))
{
kvPairList.Add(new KeyValuePair<string, string>(enumValue.ToString(), GetDescription(enumValue)));
}
return kvPairList;
}
}
在獲取字符串表示形式之前,您實際上需要將其強制轉換為int。 否則,您將獲得枚舉的表示形式,而不是整數。
kvPairList.Add(new KeyValuePair<string, string>(((int)enumValue).ToString(), GetDescription(enumValue)));
由於該值的類型為System.Enum
而不是基礎枚舉,所以強制轉換將不起作用。 否則,您可以使用適當的Convert
方法。
kvPairList.Add(new KeyValuePair<string, string>(Convert.ToInt32(enumValue).ToString(), GetDescription(enumValue)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.