C# 在ASP.NET C中对哈希表数据进行排序#

C# 在ASP.NET C中对哈希表数据进行排序#,c#,asp.net,enums,C#,Asp.net,Enums,我正在用Enum绑定我的dropdownlist,我有下面的Enum和绑定dropdownlist的代码 public enum DignosisOrderType { All = 0, General = 1, Uveitis = 2, Coag =3, PreOp=4, Tests=5, RP =6 } public static void BindDropDow

我正在用Enum绑定我的dropdownlist,我有下面的Enum和绑定dropdownlist的代码

public enum DignosisOrderType
    {
        All = 0,
        General = 1,
        Uveitis = 2,
        Coag =3,
        PreOp=4,
        Tests=5,
        RP =6
    }

public static void BindDropDownByEnum(DropDownList dropDownList, Type enumDataSource, )
        {
            Hashtable htDataSource = new Hashtable();

            string[] names = Enum.GetNames(enumDataSource);
            Array values = Enum.GetValues(enumDataSource);

            for (int i = 0; i < names.Length; i++)
                htDataSource.Add(names[i], values.GetValue(i));

            BindDropDown(dropDownList, htDataSource, "key", "value");
        }

        public static void BindDropDown(DropDownList dropDownList, object dataSource, string dataTextField, string dataValueField)
        {
            dropDownList.DataSource = dataSource;
            dropDownList.DataTextField = dataTextField;
            dropDownList.DataValueField = dataValueField;
            dropDownList.DataBind();
        }
公共枚举诊断器类型
{
全部=0,
一般=1,
葡萄膜炎=2,
Coag=3,
PreOp=4,
测试=5,
RP=6
}
公共静态void BindDropDownByEnum(DropDownList DropDownList,类型enumDataSource,)
{
Hashtable htDataSource=新的Hashtable();
字符串[]名称=Enum.GetNames(enumDataSource);
数组值=Enum.GetValues(enumDataSource);
for(int i=0;i

当Dropdownlist被绑定时,数据没有按排序顺序提交,我希望Dropdownlist是按创建枚举的顺序绑定的。

可以做的一件事是在BindDropDown方法中迭代HT,每次添加一个ListItem,因此它们将按索引排序。

您可以做的一件事是在BindDropDown方法中迭代HT,每次添加一个ListItem,因此,它们将按索引排序。

只需使用SortedList或将哈希表替换为SortedList

只需使用SortedList或将哈希表替换为SortedList

A
哈希表
就不是该作业的工具。试试看


请记住,哈希表支持非常快速的搜索,但是它不保持任何顺序。A
哈希表那时不是作业的工具。试试看


请记住,哈希表支持非常快速的搜索,但是它不保留任何顺序

如果您希望项目按添加顺序进行,则不需要哈希表或排序列表
。(不管怎样,当您确实希望它们按键排序顺序排列时,排序列表是可以的,但是如果您以后决定需要调整顺序,这将导致问题。)特别是,您没有尝试使用按键查找值的功能,因此就我所知,您根本不需要
IDictionary

对于包含键和值的类型,您只需要一个
列表
。您可以使用匿名类型执行此操作,例如:

var keyValuePairs = Enum.GetValues(enumDataSource)
                        .Select(x => new { key = x.ToString(), value = x })
                        .ToList();
BindDropDown(dropDownList, keyValuePairs, "key", "value");

如果您希望项目按添加顺序排列,则不需要哈希表或
SortedList
。(不管怎样,当您确实希望它们按键排序顺序排列时,排序列表是可以的,但是如果您以后决定需要调整顺序,这将导致问题。)特别是,您没有尝试使用按键查找值的功能,因此就我所知,您根本不需要
IDictionary

对于包含键和值的类型,您只需要一个
列表
。您可以使用匿名类型执行此操作,例如:

var keyValuePairs = Enum.GetValues(enumDataSource)
                        .Select(x => new { key = x.ToString(), value = x })
                        .ToList();
BindDropDown(dropDownList, keyValuePairs, "key", "value");

实际上,有一个名为的专门集合为您提供了这两种功能:排序和键控访问。

实际上有一个名为的专门集合为您提供了这两种功能:排序和键控访问。

我尝试了它,但没有扩展我为Enum.GetValues(enumDataSource)找到的“.select”,但是没有为Enum.GetValues(enumDataSource)找到“.select”的扩展名