Приведение значения enum к int при привязке к раскрывающемуся списку с использованием отражения - PullRequest
1 голос
/ 17 октября 2010

У меня есть некоторый код, который привязывает перечисление к раскрывающемуся списку, однако я хотел бы построить раскрывающийся список, чтобы взять целочисленное значение из перечисления для значения и атрибут описания для текста.

Я попытался определить kvPairList как int / string и привести enumValue и (int). Я также попытался преобразовать. 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;
    }

}

1 Ответ

1 голос
/ 17 октября 2010

Вам нужно на самом деле привести его к 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)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...