要使用哪个集合类:Hashtable还是Dictionary?

Dav*_*.ca 1 c# collections dictionary

我需要定义一个带有内部集合对象的类,以通过字符串键来保存不同类型的值(例如string,int,float,DateTime和bool).我可以使用Hashtable,因为它不是强类型集合类,而Dictionary用于强类型项(尽管我可以使用对象作为Dictionary).

这是我想要定义我的类及其用法的情况:

 public class MyBaseClass<D> {
   protected Hashtable ht = new Hashtable();

   MyClass public SetValue<T>(string key, T value)
   {
       ht.Add(key, value);
       return this;
   }

   public abstract D GetObject();
 }

 // Example of using the base class for data as class Data1
 public MyClass<Data1> : MyBaseClass<Data1> {
      public Data1 GetObject() {
         return new Data1 {
             Property1 = ht["key1"] as string,
             Property2 = Int.Parse(ht["key2"].ToString())
          }
 }
Run Code Online (Sandbox Code Playgroud)

以上示例,我不确定在MyBaseClass中保存数据的最佳集合是什么?我读了一些关于Hashtable的文章.它是一个过时的集合,与Dictionary集合相比性能要慢得多.我应该使用.Net 3.5中的Dictionary或任何其他可用的集合吗?

Jon*_*eet 9

就我个人而言,我会Dictionary<string, object>在这种情况下使用.至少这将阻止您尝试使用非字符串键.

我个人也会停止使用受保护的字段 - 考​​虑使用受保护的setter和public getter向您的基类添加索引器:

public object this[string key]
{
    get { return ht[key]; }
    protected set { ht[key] = value; }
}
Run Code Online (Sandbox Code Playgroud)

如果您希望它null通过缺失键返回访问权限,则应TryGetValue在getter中使用.同样Add,如果您希望在重复键添加时失败,则可以在setter中使用.