我看到有很多人在C#中做到这一点......
if (someDictionary.Count > 0) {
someDictionary.Clear();
}
我的问题是,为什么不只是.Clear
呢?这有什么关系?我应该在清算之前检查计数还是仅仅是没用并且没有做任何不同的事情?
更重要的是我很困惑为什么我经常这么看。
答案 0 :(得分:5)
如果您查看Dictionary.Clear()的源代码,您会看到它自行检查。
public void Clear() {
if (count > 0) {
for (int i = 0; i < buckets.Length; i++) buckets[i] = -1;
Array.Clear(entries, 0, count);
freeList = -1;
count = 0;
freeCount = 0;
version++;
}
}
因此,在外面进行检查似乎是浪费时间。
为什么大家会这样做?可能是因为如果你没有必要不做工作似乎是有意义的,如果你不知道实施是什么,你可能会认为你正在获得一些东西。
答案 1 :(得分:2)
不,没有必要。 Clear()
方法实际上就是自己做的,你可以从Reference Implementation:
public void Clear() {
if (count > 0) {
/* omitted for brevity */
}
}
答案 2 :(得分:2)
我不担心其他人为此做什么以及为何做这样的事情,有很多方法可以给猫皮肤,软件,不良做法等许多不同的使用案例...我们永远不会知道为什么会这样做。
我们所知道的是,除非您有案例,否则无需先检查计数。在集合上调用clear将清除它,如果它已经为空,它将不执行任何操作并继续(即不会抛出任何异常)。事实上,对于性能影响很小甚至没有影响,事实上,如果你知道你要清除它,实际上检查计数实际上要慢一些。