Как протестировать на пустой generic.dictionary набор?

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

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

Объект reportGraph имеет систему типов. Наборы. Универсальный. Словарь При выполнении этого кода тогда reportGraphs словарь пуст, и MoveNext () сразу бросает NullReferenceException. Я не хочу помещать выгоду попытки вокруг блока, если существует более производительный способ обработать пустой набор.

Спасибо.

12
задан DEH 18 January 2010 в 20:23
поделиться

3 ответа

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

Однако в вашем случае Reportgraphs выглядит как это IENUMERATOR - Есть ли причина, по которой вы перечисляете свою коллекцию вручную?

20
ответ дан 2 December 2019 в 05:15
поделиться

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

6
ответ дан 2 December 2019 в 05:15
поделиться

Как сказал Дарин, ReportGraphs NULL , если он выбрасывает NullReferenceException . Лучшим способом было бы, чтобы он никогда не был нулевым (то есть, убедитесь, что он инициализируется в конструкторе вашего класса).

Еще один способ сделать это (чтобы избежать перечисления явно) было бы использовать формулизацию :

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

[редактирование] Обратите внимание, что этот пример также предполагается, что ReportGraphs никогда не NULL .

3
ответ дан 2 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: