我想弄清楚何时以及为什么要使用Dictionary或HashTable.我在这里做了一些搜索,发现有人在谈论字典的一般优点,我完全赞同,这导致拳击和拆箱优势,以获得轻微的性能提升.
但是我也读过字典并不总是按照它们插入的顺序返回对象,它被排序的东西.作为HashTable的地方.据我了解,这导致HashTable在某些情况下更快.
我的问题是,这些情况可能是什么?我上面的假设我错了吗?你可以用什么情况来选择一个在另一个之上,(是的,最后一个有点含糊不清).
我正在寻找一种方法来创建一个具有一组静态属性的类.在运行时,我希望能够从数据库向此对象添加其他动态属性.我还想为这些对象添加排序和过滤功能.
我如何在C#中执行此操作?
而不是使用Dictionary<TKey,TValue>我想要某种类型的集合类,可以使用值的属性作为键,是否有这样的东西?
我正在寻找一种与泛型字典的Keys属性(类型为KeyCollection)一样高效的方法.
使用Linq select语句可以工作,但每次请求密钥时它都会迭代整个集合,而我相信密钥可能已经在内部存储.
目前我的GenericKeyedCollection类看起来像这样:
public class GenericKeyedCollection<TKey, TItem> : KeyedCollection<TKey, TItem> {
private Func<TItem, TKey> getKeyFunc;
protected override TKey GetKeyForItem(TItem item) {
return getKeyFunc(item);
}
public GenericKeyedCollection(Func<TItem, TKey> getKeyFunc) {
this.getKeyFunc = getKeyFunc;
}
public List<TKey> Keys {
get {
return this.Select(i => this.GetKeyForItem(i)).ToList();
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:感谢您的回答,我将使用以下属性而不是使用Linq进行迭代.
public ICollection<TKey> Keys {
get {
if (this.Dictionary != null) {
return this.Dictionary.Keys;
}
else {
return new Collection<TKey>(this.Select(this.GetKeyForItem).ToArray());
}
}
}
Run Code Online (Sandbox Code Playgroud)