Есть ли способ не возвращать значение из последней части троичного оператора - PullRequest
0 голосов
/ 05 декабря 2011

Есть ли способ, чтобы троичный оператор делал то же самое, что и это?:

if (SomeBool)
  SomeStringProperty = SomeValue;

Я мог бы сделать это:

SomeStringProperty = someBool ? SomeValue : SomeStringProperty;

Но это вызвало бы срабатывание геттера и сеттерадля SomeStringProperty, даже если SomeBool имеет значение false (верно)?Так что это будет не то же самое, что приведенное выше утверждение.

Я знаю, что решение состоит в том, чтобы просто не использовать троичный оператор, но мне просто стало интересно, есть ли способ игнорировать последнюю часть выражения.

Ответы [ 3 ]

5 голосов
/ 05 декабря 2011

Это не имеет смысла.

Тернарный оператор является выражением.
Выражение должно всегда иметь значение, , если только выражение не используется в качестве оператора (что не может быть троичным оператором).

Вы не можете написать SomeProperty = <i>nothing</i>

2 голосов
/ 05 декабря 2011

Это так же близко, как вы можете выполнить то же самое, что и оператор IF, за исключением того, что вы должны хранить результат троичного выражения; даже если ты на самом деле не используешь это ...

Полный пример:

namespace Blah
{
public class TernaryTest
{
public static void Main(string[] args)
{
bool someBool = true;
string someString = string.Empty;
string someValue = "hi";
object result = null;

// if someBool is true, assign someValue to someString,
// otherwise, effectively do nothing.
result = (someBool) ? someString = someValue : null;
} // end method Main
} // end class TernaryTest
} // end namespace Blah 
1 голос
/ 05 декабря 2011

Я думаю, вы ищете что-то вроде оценки короткого замыкания (http://en.wikipedia.org/wiki/Short-circuit_evaluation) с троичным оператором C #.

Я полагаю, вы найдете ответ НЕТ.

В отличие от тех, кто отрицал это, я думаю, что это правильный вопрос.

...