Проверка на наличие элементов
Всем привет.
Хочу проверить пришедший объект на "есть ли что-то внутри" , Empty как я понимаю. Могу ли я использовать эту форму (.Any())?
if (summaryViewResultSection.ReceivableAccountBalance.Items.Any() &&
summaryViewResultSection.PayableAccountBalance.Items.Any())
{
var receivableBalanceTable = GetReceivableBalanceTable(summaryViewResultSection, worksheet, currency, currentRow, currentColumn);
var payableBalanceTable = GetPayableBalanceTable(summaryViewResultSection, worksheet, currency, receivableBalanceTable.CurrentRow + 3, currentColumn);
GetNetTotal(receivableBalanceTable, payableBalanceTable, worksheet, currency, currentColumn);
}
else
{
if (summaryViewResultSection.PayableAccountBalance.Items.Any())
{
GetPayableBalanceTable(summaryViewResultSection, worksheet, currency, currentRow, currentColumn);
}
else
{
GetReceivableBalanceTable(summaryViewResultSection, worksheet, currency, currentRow, currentColumn);
}
}
Прикрепляю объект который может приходить в Json
"payableAccountBalance": {
"items": [],
"total": 0.0
},
Ответы (1 шт):
Если коллекция имеет тип IEnumerable<T> или более конкретный тип, реализующий этот интерфейс (например, IReadOnlyCollection<T> или там List<T>), то проверять на наличие элементов вполне можно через .Any().
Функция Any проверяет, не поддерживает ли объект интерфейс, с помощью которого можно проверить количество элементов без потенциально медленного перечисления, и пользуется им.
Если вы хотите пожертвовать читабельностью ради минимального выигрыша в эффективности (например, ваш код — часть цикла, который должен быть очень быстрым), и вам известен точный тип коллекции, и эта коллекция поддерживает свойство Count (не LINQ-функцию Count()!), то можно заменить проверку на collection.Count != 0. Замена свойства Count на функцию Count() скорее всего сделает ваш код лишь медленнее.