如何测试一个空的generic.dictionary集合?

问题描述 投票:12回答:3

如何测试通用字典对象以查看它是否为空?我想运行一些代码如下:

while (reportGraphs.MoveNext())
{
    reportGraph = (ReportGraph)reportGraphs.Current.Value;
    report.ContainsGraphs = true;
    break;
}

reportGraph对象的类型为System.Collections.Generic.Dictionary当运行此代码时,reportGraphs字典为空,MoveNext()立即抛出NullReferenceException。如果有更高效的处理空集合的方法,我不想在块周围放置try-catch。

谢谢。

c# collections generics nullreferenceexception
3个回答
20
投票

如果它是一个通用字典,你可以检查Dictionary.Count。如果它为空,则计数为0。

但是,在你的情况下,reportGraphs看起来像是一个IEnumerator<T> - 你有没有理由手工列举你的收藏?


6
投票

empty字典和null之间有区别。在空集合上调用MoveNext不会导致NullReferenceException。我想在你的情况下你可以测试reportGraphs != null


4
投票

正如达林所说,reportGraphsnull,如果它抛出NullReferenceException。最好的方法是确保它永远不为null(即确保它在类的构造函数中初始化)。

另一种方法(避免显式枚举)将使用foreach语句:

foreach (KeyValuePair<Key,Value> item in reportGraphs)
{
    // do something
}

[编辑]请注意,这个例子也假设reportGraphs永远不会是null

© www.soinside.com 2019 - 2024. All rights reserved.