出于XML序列化的目的,我不得不解散我正在使用的Dictionary集合。我写了一个非常简单的替代方案,包括两个类:
我已经提供了一些标准方法来帮助维护集合(添加,包含和删除)。因此,就像大多数词典类型一样,名称(或键)是唯一的:
public bool Contains(NameValueItem item)
{
foreach (NameValueItem lItem in List)
if(lItem.Name.Equals(item.Name))
return true;
return false;
}
Add使用此Contains方法来确定是否将给定项目包含在集合中:
public void Add(NameValueItem item)
{
if (!Contains(item))
List.Add(item);
}
作为沼泽标准,直观而简单,因为这段代码出现,它证明有点迟钝。有什么办法可以改善这种性能吗?还是我可以用的替代品?
我正在考虑创建一个从HashSet派生的NameValueHashSet。
可选......:
我有一个问题,我将在一个单独的帖子中提出,但我会告诉你是否要解决它。
我想在NameValueCollection,Names和Values中添加2个属性,这些属性从NameValueItem对象的Collection中返回字符串List。相反,我将它们构建到方法GetNames()和GetValues()中,因为我必须构建集合(即创建List(名称/值),迭代集合,将名称/值添加到List并返回List)。
这是一个更好的选择吗?在良好的编码实践,性能等方面?由于我对属性的看法一直是尽可能地剥离它,所以只有引用,算术等应该存在,没有任何进程层。如果是这种情况,则应将其构建到方法中。思考?
答案 0 :(得分:0)
也许您不应该尝试重建框架已经提供的内容?你的字典实现会因为不能扩展而表现不佳。内置Dictionary<TKey, TValue>
具有O(1)访问性能,适用于大多数插入和删除操作(除非存在冲突或必须扩展内部存储)。
您可以扩展现有字典以提供XML序列化支持;看到这个问题和答案:Serialize Class containing Dictionary member
至于你的第二个问题 - Dictionary已经提供了获取IEnumerable键和值的方法。这枚举了调用者请求的键和/或值;这是延迟执行,并且可能是每次构建完整List
的首选方法(这需要遍历字典中的所有元素)。如果调用者想要一个列表,那么他们只需要dictionary.Values.ToList()
。