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

时间:2010-01-18 20:23:09

标签: c# collections generics nullreferenceexception

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

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

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

感谢。

3 个答案:

答案 0 :(得分:20)

如果它是通用字典,您只需检查Dictionary.Count即可。如果它是空的,则计数为0.

但是,在您的情况下,reportGraphs看起来像是IEnumerator<T> - 您是否有理由手动枚举您的收藏品?

答案 1 :(得分:6)

empty字典与null之间存在差异。在空集合上调用MoveNext不会产生NullReferenceException。我想在你的情况下你可以测试reportGraphs != null

答案 2 :(得分:4)

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

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

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

[编辑] 请注意,此示例还假设reportGraphs永远不会null