C # встроенный if или значение синтаксиса - PullRequest
3 голосов
/ 01 марта 2012

Есть ли в C # что-то вроде синтаксиса JavaScript if или value?

Например, я знаю, что вы можете сделать это в JavaScript:

var test = someValue || thisValue;

если someValue не определено, имеет значение false или пустую строку, тогда test становится thisValue . Тем не менее, я никогда не видел способа сделать это на C #, кроме традиционного if или встроенного if.

Ответы [ 4 ]

3 голосов
/ 01 марта 2012

NullCoalesce

var test = someValue ?? thisValue;

Тем не менее, C # не ведет себя странно.

Оценка короткого замыкания в C # более уместна при эваляции bools:

private bool EvaluateA()
{
    return true;
}

private bool EvaluateB()
{
    return false;
}

public static int main()
{
    Console.Write(EvaluateA() || EvaluateB()); // EvaluateB is never called
}
2 голосов
/ 01 марта 2012

Использовать ??

var test = someValue ?? thisValue;

Это работает, только если someValue равно нулю.Чтобы проверить false или string.Empty, вам нужно использовать обычный оператор if.

2 голосов
/ 01 марта 2012

Его называют оператором слияния нуль.

String someValue = null;
var thisValue = "Foo";
var test = someValue ?? thisValue;
// test will be == "Foo"

Как уже упоминалось в комментариях, это не работает для пустых строк, "ложных" и т. Д. Что вы можете сделать в C #, это написатьметод расширения, чтобы сделать это, если вы действительно хотите:

public static class MyStringThing {
    public static String FixErUp(this String s1, String s2) {
        if (String.IsNullOrWhiteSpace(s1) || s1.Equals("false"))
            return s2;
        return s1;
    }
}

для использования следующим образом:

String someValue = "false";
var thisValue = "Foo";
var test = someValue.FixErUp(thisValue);
// test will be == "Foo"
1 голос
/ 01 марта 2012

Не совсем. Но оно имеет нулевое слияние.

Учитывая тип ссылки, вы можете иметь значение или альтернативу, если оно равно null.

string foo = null;
string value = foo ?? "bar"; // value == "bar"

В противном случае для любого другого случая (т. Е. Ненулевого значения, всех пробелов, типа значения и т. Д.) Вам придется выполнять другие формы проверки.

string foo = "";
string value1 = foo ?? "bar"; // value1 == ""
string value2 = !String.IsNullOrEmpty(foo) ? foo : "bar"; // value1 == "bar"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...