Кратчайший способ проверить нулевое значение и назначить другое значение, если нет
Я вытаскиваю значения 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();
Однако я не могу найти оптимальный способ сделать это. Есть ли лучший способ или что у меня есть лучший способ сделать это?
Ответы
Ответ 1
Попробуйте следующее:
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
совпадает с одним из возможных значений, которое вы хотите установить. Для всех остальных случаев вам понадобится использовать условный оператор, как я показал в первом примере.
Ответ 2
coalesce operator (??) - это то, что вы хотите, я полагаю.
Ответ 3
Мое предположение - это лучшее, что вы можете придумать:
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();
Ответ 4
Вы ищете оператора С# coalesce:??. Этот оператор принимает левый и правый аргументы. Если левая сторона оператора имеет значение null или nullable без значения, она вернет правильный аргумент. В противном случае он вернет левый.
var x = somePossiblyNullValue ?? valueIfNull;
Ответ 5
С С# 6 есть немного более короткий путь для случая, когда planRec.approved_by не является строкой:
this.approved_by = planRec.approved_by?.ToString() ?? "";
Ответ 6
Используйте оператор объединения С#:
// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YourNullReplacement;
Ответ 7
Чтобы расширить @Dave answer... если planRec.approved_by уже является строкой
this.approved_by = planRec.approved_by ?? "";
Ответ 8
Чтобы назначить непустую переменную, не повторяя имя фактической переменной (и не присваивая ничего, если переменная равна нулю!), вы можете использовать небольшой вспомогательный метод с параметром Action
:
public static void CallIfNonEmpty(string value, Action<string> action)
{
if (!string.IsNullOrEmpty(value))
action(value);
}
А потом просто используйте его:
CallIfNonEmpty(this.approved_by, (s) => planRec.approved_by = s);
Ответ 9
Вы также можете сделать это в своем запросе, например, в sql-сервере, google ISNULL
и CASE
встроенных функциях.
Ответ 10
Начиная с С# 8.0, вы можете использовать оператор?? = для замены кода вида
if (variable is null)
{
variable = expression;
}
со следующим кодом:
variable ??= expression;
Более подробная информация здесь
Ответ 11
Я использую метод расширения 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);