我看到有很多人在C#中这样做...
if (someDictionary.Count > 0) {
someDictionary.Clear();
}
我的问题是,为什么不只是.Clear
呢?这有什么关系?我应该在清除之前检查计数还是仅仅是没用并且没有做任何不同的事情?
更重要的是我很困惑为什么我经常这么看。
如果你查看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++;
}
}
因此,在外面进行检查似乎是浪费时间。
人们为什么要这样做?可能是因为如果你不必要的话,不做工作似乎是有意义的,如果你不知道实施是什么,你可能会认为你正在获得一些东西。
我不担心其他人为什么以及为什么会做这样的事情,有很多方法可以让猫皮肤,软件,不良做法等许多不同的用例...我们永远不会知道为什么这样的事情完成。
我们所知道的是,除非您有案例,否则无需先检查计数。在集合上调用clear将清除它,如果它已经为空,它将不执行任何操作并继续(即不会抛出任何异常)。事实上,几乎没有性能影响,事实上,有人可能会说,如果你知道你要清除它,实际上检查计数的速度实际上要慢一些。
不,没有必要。 Clear()
方法实际上就是这样做的,你可以从Reference Implementation看出来:
public void Clear() {
if (count > 0) {
/* omitted for brevity */
}
}