Подтвердить что ты не робот

Кратчайший способ проверить нулевое значение и назначить другое значение, если нет

Я вытаскиваю значения 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();

Однако я не могу найти оптимальный способ сделать это. Есть ли лучший способ или что у меня есть лучший способ сделать это?

4b9b3361

Ответ 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 совпадает с одним из возможных значений, которое вы хотите установить. Для всех остальных случаев вам понадобится использовать условный оператор, как я показал в первом примере.

Ответ 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);