我需要定义一个具有内部集合对象的类,以通过字符串键保存不同类型的值(例如字符串、整数、 float 、日期时间和 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())
}
}
对于上面的示例,我不确定在 MyBaseClass 中保存数据的最佳集合是什么?我读了一些关于哈希表的文章。它是一个过时的集合,与字典集合相比,性能要慢得多。我应该使用 Dictionary 还是 .Net 3.5 中可用的任何其他集合?
请您参考如下方法:
我个人会使用 Dictionary<string, object>在这种情况下。 至少这会阻止您尝试使用非字符串键。
我个人也会停止使用 protected 字段 - 考虑使用 protected setter 和公共(public) getter 向您的基类添加索引器:
public object this[string key]
{
get { return ht[key]; }
protected set { ht[key] = value; }
}
如果你想让它返回null通过丢失的 key 访问,你应该使用 TryGetValue在 setter/getter 中。同样,您可以使用 Add如果您想在添加重复键时失败,请在 setter 中。
