HashTable 索引器定义

 

        // Summary:
        //     Gets or sets the value associated with the specified key.
        //
        // Parameters:
        //   key:
        //     The key whose value to get or set.
        //
        // Returns:
        //     The value associated with the specified key. If the specified key is not
        //     found, attempting to get it returns null, and attempting to set it creates
        //     a new element using the specified key.
        //
        // Exceptions:
        //   System.ArgumentNullException:
        //     key is null.
        //
        //   System.NotSupportedException:
        //     The property is set and the System.Collections.Hashtable is read-only.  -or-
        //     The property is set, key does not exist in the collection, and the System.Collections.Hashtable
        //     has a fixed size.
        public virtual object this[object key] { get; set; }

 

里面在Returns中明确写到,当指定的key无法找到时,返回null值。所以可以使用下面的代码片段是可取的:

 

            Hashtable hs = new Hashtable();
            // add some elements
            if (hs["key"] == null)
            {
                //the specified key does not found in hashtable
            }

Dictionary定义:

        // Summary:
        //     Gets or sets the value associated with the specified key.
        //
        // Parameters:
        //   key:
        //     The key of the value to get or set.
        //
        // Returns:
        //     The value associated with the specified key. If the specified key is not
        //     found, a get operation throws a System.Collections.Generic.KeyNotFoundException,
        //     and a set operation creates a new element with the specified key.
        //
        // Exceptions:
        //   System.ArgumentNullException:
        //     key is null.
        //
        //   System.Collections.Generic.KeyNotFoundException:
        //     The property is retrieved and key does not exist in the collection.
        public TValue this[TKey key] { get; set; }

注释中在Returns中明确写道当指定的Key不存在时,抛出System.Collections.Generic.KeyNotFoundException,并且自动会以当前的Key创建一个新元素。

所以在使用Dictionary时,就不能通过HashTable那样来判断一个Key是否存在,而应该使用下面的代码片段:

            Dictionary<string, string> dict = new Dictionary<string, string>();
            // add some elements
            if(!dict.ContainsKey("key"))
            {
                //the specified key does not found in dictionary
            }

 

作者: Tecky Li 发表于 2011-02-15 17:13 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架