System.Collections.Hashtable ht = new System.Collections.Hashtable();
ht.Add("@userID", "1001");
ht.Add("@userName", "testName1");
ht.Add("@password", "123");
foreach (DictionaryEntry d in ht)
{
    Console.WriteLine(d.Key.ToString() + d.Value.ToString());
  
}
输出为:
@userID1001
@password123
@userNametestName1
显示出来的数据顺序乱了,如何解决?

解决方案 »

  1.   

    hashtable是无序的。这是基础知识啊。你可以把hashtable的key放到一个list里面来解决这个问题。
      

  2.   

             System.Collections.Hashtable ht = new System.Collections.Hashtable();
              System.Collections.ArrayList keys = new ArrayList();
    keys.Add("@userID"); ht.Add("@userID", "1001");
    keys.Add("@userName");ht.Add("@userName", "testName1");
    keys.Add("@userName");ht.Add("@password", "123");
    foreach (string key in keys)
    {
        Console.WriteLine(key + ht[key].ToString());  
    }
      

  3.   


    有序的hashtable就不是hashtable咯
      

  4.   

    Hashtable 的次序很重要吗?
      

  5.   

    Hashtable 是无需的, 需要有序使用System.Collections.SortedList ( 1.x +)
    System.Collections.Generic.SortedDictionary(Of TKey, TValue) (2.0 +)
      

  6.   

    我想写一个类来存放sql参数:        /// <summary>
            /// 添加一个字段/值对到数组中。
            /// </summary>
            /// <param name="_fieldName">字段名称。</param>
            /// <param name="_fieldValue">字段值。</param> 
            public void AddFieldsParameters(string _fieldName, object _fieldValue)
            {
                if (!_fieldValue.ToString().Trim().Equals(""))
                {
                    AllFieldItemsParameters.Add(_fieldName, _fieldValue);
                }           
            }        /// <summary>
            /// 添加一个Where表达式的字段/值对到数组中。
            /// </summary>
            /// <param name="_whereName">表达式名称</param>
            /// <param name="_whereValue">表达式的值</param>
            /// <param name="_sign">符号  like = …… </param>
            /// <param name="_expression">关系 And Or ……</param>
            /// <param name="_left">左边括符</param>
            /// <param name="_right">右边括符</param>
            public void AddConditionParameters(string _whereName, object _whereValue, string _sign, string _expression,string _left,string _right)
            {
                if (!_whereValue.ToString().Trim().Equals(""))
                {                
                    Hashtable _ht = new Hashtable();
                    _ht.Add("whereValue", _whereValue);
                    _ht.Add("sign",_sign);
                    _ht.Add("expression", _expression);
                    _ht.Add("left",_left);
                    _ht.Add("right",_right);
                    AllConditionParameters.Add(_whereName, _ht);
                    
                }
            } SqlCommand Cmd = new SqlCommand();
    foreach (DictionaryEntry entry1 in AllFieldItemsParameters) //增加参数和值
                {
                    Cmd.Parameters.AddWithValue("@" + entry1.Key.ToString(), entry1.Value);
                }
    foreach (DictionaryEntry entry2 in AllConditionParameters) //增加表达式的参数和值
                {                foreach (DictionaryEntry entry3 in (Hashtable)entry2.Value )
                    {
                        if (entry3.Key.ToString().Equals("whereValue"))
                        {
                            TempValue = entry3.Value;
                        }
                    }
                    Cmd.Parameters.AddWithValue("@" + entry2.Key.ToString(), TempValue);
                }
    /// <summary>
            /// 生成Where 语句
            /// </summary>
            public void GetWhereSql()
            {
                string _conditionExpress = string.Empty;  //表达式
                string _whereName = string.Empty;         //表达式的名称        
                string _sign = string.Empty;              //表达式的符号 like > < = ……
                string _expression = string.Empty;        //表达式 And  Or  ……
                string _left = string.Empty;              //左边括符
                string _right = string.Empty;             //右边括符  
                           if (AllConditionParameters.Count != 0)
                {
                    _conditionExpress = "  Where  ";                foreach (DictionaryEntry entry2 in AllConditionParameters) //增加表达式的参数和值
                    {                   
                        _whereName = entry2.Key.ToString();
                        foreach (DictionaryEntry entry3 in (Hashtable)entry2.Value)
                        {
                            if (entry3.Key.ToString().Equals("sign"))
                            {
                                _sign = entry3.Value.ToString();
                            }
                            if (entry3.Key.ToString().Equals("expression"))
                            {
                                _expression = entry3.Value.ToString();
                            }
                            if (entry3.Key.ToString().Equals("left"))
                            {
                                _left = entry3.Value.ToString();
                            }
                            if (entry3.Key.ToString().Equals("right"))
                            {
                                _right = entry3.Value.ToString();
                            }
                        }                    if (!_expression.Equals(""))
                        {
                            _conditionExpress += " "+ _expression+ " ";
                        }                    _conditionExpress += " ";
                        if (!_left.Equals(""))
                        {
                            _conditionExpress += " "+_left+" ";
                        }
                        _conditionExpress += " "+entry2.Key.ToString()+" ";
                        _conditionExpress += _sign;
                        _conditionExpress += "@" + entry2.Key.ToString()+" ";
                                           if (!_right.Equals(""))
                        {
                            _conditionExpress +=" "+ _right+" ";
                        }  
                    }
                }            this.SqlExpression = _conditionExpress;
                
            }
    生成Where 语句 顺序乱了