2013-09-29 2 views
0

У меня есть небольшая проблема при работе с C# и использовании IF-статусов с несколькими условиями.C# multiple, если условия на той же полосе

Это наиболее распространенное явление.

private void SomeFunction(string SomeString) 
{ 

    if(SomeString != null && SomeString.Trim() != "") 
    { 
    } 
} 

На некоторых языках, таких как javascript, если первый аргумент не сработает (SomeString! = Null), вторая проверка не будет выполнена. Кажется, что C# проверяет оба аргумента, даже если первый из них терпит неудачу, а затем второй генерирует исключение, поскольку вы не можете использовать .Trim() для нулевого значения.

Прямо сейчас я перехожу к этому путем вложения моего ifs, который является грязной работой. Пример:

private void SomeFunction(string SomeString) 
{ 

    if(SomeString != null) 
    { 
    if(SomeString.Trim() != "") 
    { 
     ..... 
    } 
    } 
} 

Есть ли у кого-нибудь какие-либо предложения или рекомендации по лучшему способу решить эту проблему?

+1

Хорошее эмпирическое правило: ** идти с тем, что легче читать понять **. Лично я предпочитаю первое. C# не будет проверять второе условие, если первый сбой. –

+5

C# использует оценку короткого замыкания, как JavaScript. Если 'SomeString' равно null, следующая часть выражения будет * not * оценена. – Tim

+0

Я только что проверил первый фрагмент кода и фактически * SomeString.Trim()! = "" * Никогда не оценивался, если первый сбой. Я удивлен! – Alireza

ответ

3

Ваше предположение совершенно неправильно. Когда вы используете условие И, если первое условие FALSE, второе условие никогда не оценивается и не выполняется. В условном ИЛИ, если первое условие TRUE, второе никогда не оценивается и не выполняется.

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

Это называется short-circuit evaluation.

Это основной принцип программирования для C-языков, но также и для любого другого основного языка.

+0

После дальнейших испытаний вы очень правы, и мне очень жаль, что они спешат и публикуют, прежде чем продолжить расследование за пределами нескольких поисковых запросов Google, которые не дали мне правильных ответов. Кажется, это была не моя проблема и причина для исключений, а что-то еще в конце концов. –

3

Существует лучший способ:

private void SomeFunction(string SomeString) 
{ 
    if (!string.IsNullOrWhiteSpace(SomeString)) 
    { 
     // your code 
    } 
} 
+0

Действительно ли это решение проблемы ОП? Он спросил о && оценке операнда! – Alireza

+0

Да, это действительно проблема. Последнее предложение вопроса: _ У кого-нибудь есть предложения или рекомендации по лучшему пути решения этого вопроса? _ И мой ответ демонстрирует лучший способ решить проблему. – ProgramFOX

+0

Строго говоря, OP написал 'SomeString.Trim()! =" "', Который намерен проверить наличие ** пустоты **, а не ** - это пробел **. – haim770

0
if(!string.IsNullOrEmpty(SomeString)) 

похож на ProgramFOX предпочитают это, если вы настаиваете на том, «.trim()»

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