Я извлекаю 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();
Однако я не могу найти оптимального способа сделать это. Есть ли способ лучше или я могу это сделать лучше всего?
c#
.net
null
variable-assignment
Splashlin
источник
источник
Ответы:
Попробуй это:
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();
Вы также можете использовать оператор объединения с нулем, как говорили другие, поскольку никто не привел пример, который работает с вашим кодом, вот один:
this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();
Но этот пример работает только потому, что возможное значение
this.approved_by
совпадает с одним из потенциальных значений, которые вы хотите установить. Во всех остальных случаях вам нужно будет использовать условный оператор, как я показал в моем первом примере.источник
if (planRec.approved_by == null) { this.approved_by = planRec.approved_by.toString(); //<= nullref } else { this.approved_by = planRec.approved_by;}
. Если я не прав, укажите на ошибку.this.approved_by = planRec.approved_by?.toString() ?? "";
<- Это оператор с нулевым условием, и я не думаю, что он был когда-то, когда этот вопрос был впервые задан и дан ответ. Надеюсь, OP это видит, поэтому он может провести рефакторинг своего 7-летнего кода, написанного двумя работами назад :).Оператор COALESCE (??) является то , что вы хотите, я считаю.
источник
Вы ищете оператор объединения C #: ??. Этот оператор принимает левый и правый аргумент. Если левая часть оператора имеет значение null или обнуляемое значение без значения, он вернет правый аргумент. В противном случае вернет левую.
var x = somePossiblyNullValue ?? valueIfNull;
источник
Думаю, лучшее, что вы можете придумать, это
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();
источник
В C # 6 есть несколько более короткий способ для случая, когда planRec.approved_by не является строкой:
this.approved_by = planRec.approved_by?.ToString() ?? "";
источник
Используйте оператор объединения C #: ??
// if Value is not null, newValue = Value else if Value is null newValue is YournullValue var newValue = Value ?? YourNullReplacement;
источник
Начиная с C # 8.0, вы можете использовать оператор ?? = для замены кода формы
if (variable is null) { variable = expression; }
со следующим кодом:
Более подробная информация здесь
источник
Чтобы расширить ответ @Dave ... если planRec.approved_by уже является строкой
this.approved_by = planRec.approved_by ?? "";
источник
Чтобы назначить непустую переменную без повторения фактического имени переменной (и без присвоения чего-либо, если переменная равна нулю!), Вы можете использовать небольшой вспомогательный метод с
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);
источник
Вы также можете сделать это в своем запросе, например, в 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);
источник