Как проверить наличие пустой коллекции generic.dictionary? - PullRequest
12 голосов
/ 18 января 2010

Как проверить общий словарный объект, чтобы увидеть, пуст ли он? Я хочу запустить некоторый код следующим образом:

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

Объект reportGraph имеет тип System.Collections.Generic.Dictionary При выполнении этого кода словарь reportGraphs становится пустым, а MoveNext () немедленно генерирует исключение NullReferenceException. Я не хочу помещать пробную зацепку вокруг блока, если есть более эффективный способ обработки пустой коллекции.

Спасибо.

Ответы [ 3 ]

20 голосов
/ 18 января 2010

Если это общий словарь, вы можете просто проверить Dictionary.Count .Счет будет 0, если он пуст.

Однако, в вашем случае, reportGraphs выглядит так, как будто это IEnumerator<T> - есть ли причина, по которой вы перечислили свою коллекцию вручную?

6 голосов
/ 18 января 2010

Существует разница между empty словарем и null.Вызов MoveNext для пустой коллекции не приведет к NullReferenceException.Я думаю, в вашем случае вы можете проверить, если reportGraphs != null.

4 голосов
/ 18 января 2010

Как сказал Дарин, reportGraphs равно null, если выбрасывает NullReferenceException. Лучший способ - убедиться, что он никогда не равен нулю (то есть, убедиться, что он инициализирован в конструкторе вашего класса).

Другой способ сделать это (чтобы избежать явного перечисления) - использовать оператор foreach:

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

[Изменить] Обратите внимание, что в этом примере также предполагается, что reportGraphs никогда не является null.

...