检查null的最短方法,如果没有则分配另一个值

时间:2009-07-13 16:28:30

标签: c# .net null variable-assignment

我正在从数据库中提取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();

然而,我无法找到最佳方法。有没有更好的方式或者我有最好的方法呢?

11 个答案:

答案 0 :(得分:82)

试试这个:

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的可能值与您希望将其设置为的潜在值之一相同。对于所有其他情况,您将需要使用条件运算符,如我在第一个示例中所示。

答案 1 :(得分:28)

我相信coalesce operator (??)就是你想要的。

答案 2 :(得分:24)

我的猜测是你能想到的最好的

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

当然,因为你暗示approved_byobject(不能等于“”)的事实,这将被重写为

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

答案 3 :(得分:20)

您正在寻找C#coalesce运算符:??。该运算符采用左右参数。如果运算符的左侧为null或可以为null且没有值,则它将返回正确的参数。否则它将返回左侧。

var x = somePossiblyNullValue ?? valueIfNull;

答案 4 :(得分:11)

对于C#6,planRec.approved_by不是字符串的情况稍微短一些:

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

答案 5 :(得分:9)

使用C#coalesce运算符:??

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

答案 6 :(得分:8)

扩展@Dave's answer ...如果planRec.approved_by已经是字符串

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

答案 7 :(得分:5)

从C#8.0开始,您可以使用?? =运算符替换表单代码

if (variable is null)
{
    variable = expression;
}

具有以下代码:

variable ??= expression;

更多信息为here

答案 8 :(得分:2)

要分配非空变量而不重复实际变量名称(如果变量为null,则不指定任何内容!),您可以使用带有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 :(得分:1)

您也可以在查询中执行此操作,例如在sql server,google ISNULLCASE内置函数中。

答案 10 :(得分:-3)

我使用扩展方法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);