Самый короткий способ проверить значение null и назначить другое значение, если нет


Я varchar значения из БД и хотите установить string Я назначаю их как "" если они null. В настоящее время я делаю это так:

if (string.IsNullOrEmpty(planRec.approved_by) == true)
  this.approved_by = "";
else
  this.approved_by = planRec.approved_by.toString();

кажется, что должен быть способ сделать это в одной строке что-то вроде:

this.approved_by = "" || planRec.approved_by.toString();
Я не могу найти оптимальный способ сделать это. Есть ли лучший способ или то, что у меня есть лучший способ сделать это?
10 51

10 ответов:

попробуйте это:

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();

вы также можете использовать оператор null-coalescing, как сказали другие - поскольку никто не привел пример, который работает с вашим кодом, вот один:

this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();

но этот пример работает только с возможным значением для this.approved_by это то же самое, что и одно из потенциальных значений, которое вы хотите установить. Для всех остальных случаев вам нужно будет использовать условный оператор, как я показал в своем первом примере.

Я думаю, что лучшее, что вы можете придумать, это

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty
                                                      : planRec.approved_by.ToString();

конечно, так как вы намекаете на то, что approved_by это object (который не может равняться ""), это будет переписано как

this.approved_by = (planRec.approved_by ?? string.Empty).ToString();

The оператор сливаются (??) это то, что вы хотите, я считаю.

вы ищете оператор c# coalesce:??. Этот оператор принимает левый и правый аргумент. Если левая часть оператора имеет значение null или nullable без значения, он вернет правый аргумент. В противном случае он вернет левый.

var x = somePossiblyNullValue ?? valueIfNull;

С C#6 есть немного более короткий путь для случая, когда planRec.approved_by не строку:

this.approved_by = planRec.approved_by?.ToString() ?? "";

направить @ответ Дейва...если планрек.approved_by - это уже строка

this.approved_by = planRec.approved_by ?? "";

Используйте оператор c# coalesce:??

// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YournullValue;

вы также можете сделать это в своем запросе, например, в sql server, google ISNULL и CASE встроенные функции.

чтобы назначить непустую переменную, не повторяя фактическое имя переменной (и ничего не назначая, если переменная равна нулю!), вы можете использовать небольшой вспомогательный метод с

Я использую метод расширения SelfChk

static class MyExt {
//Self Check 
 public static void SC(this string you,ref string me)
    {
        me = me ?? you;
    }
}

тогда используйте как

string a = null;
"A".SC(ref a);