2013-09-05 4 views
2

Используя vb.net, следующий код генерирует исключение с помощью null-указателя, но выражение должно гарантировать, что match не является нулевым.Оба пути оцениваются в тройном операторе?

repeater.DataSource = IIf(collection IsNot Nothing AndAlso match IsNot Nothing, collection.FindAll(match), collection) 

Замена этого с регулярным, если-иначе построить не отбрасывается никакой ошибки:

If collection IsNot Nothing AndAlso match IsNot Nothing Then 
    repeater.DataSource = collection.FindAll(match) 
Else 
    repeater.DataSource = collection 
End If 

ли как РАТН оценивается в тройном оператора?

ответ

1

Да, обе стороны оценивают, следует избегать синтаксиса IIf() и использовать If() вместо этого, потому что If() будет короткое замыкание с AndAlso.

Для получения дополнительной информации прочитайте принятый ответ VB.NET - IIF(,,) - Both “sides” are evaluated. What situations should I watch out for?.

+0

Я рад, что вы приняли ответ, не стесняйтесь вверх голосовать ответ, а также. :-) –

+0

Лучше было бы использовать оператор IF в VB.Net, который _does_ короткое замыкание. IIF - это просто нормальная функция. Ответ Хабиба - лучший. –

+0

@ChrisDunaway - Я упомянул, что 'If' будет замыкаться в моем ответе, но вы можете защищать любой ответ, который вы считаете лучшим. –

3

If Operator (Visual Basic) - MSDN

Условный оператор, который вызывается с тремя аргументами работает как функция IIf за исключением того, что он использует оценку короткого замыкания. функция IIf всегда оценивает все три своих аргументов

Смежные вопросы