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

我把 varchar值从一个数据库,并希望设置的 string,我分配他们为“”,如果他们是 null。我现在是这样做的:

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

There seems like there should be a way to do this in a single line something like:

this.approved_by = "" || planRec.approved_by.toString();

然而,我找不到一个最佳的方法来做到这一点。有没有更好的办法,或者我有什么最好的办法?

285443 次浏览

试试这个:

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

你也可以像其他人说的那样使用空聚合运算符——因为没有人给出一个与你的代码一起工作的例子:

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

但是这个示例只能工作,因为 this.approved_by的一个可能值与您希望将其设置为的一个潜在值相同。对于所有其他情况,你需要使用条件运算符,就像我在第一个例子中展示的那样。

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

您正在寻找 C # 合并运算符: ? ? ?.这个操作符接受一个左参数和一个右参数。如果操作符的左边是 null 或者是一个没有值的空值,它将返回右边的参数。否则它会返回左边。

var x = somePossiblyNullValue ?? valueIfNull;

My guess is the best you can come up with is

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

当然,因为您暗示 approved_byobject(它不能等于“”) ,所以这将被重写为

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

To extend @ Dave 的回答...if planRec.approved_by is already a string

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

您也可以在您的查询中做到这一点,例如在 sql 服务器、 google ISNULLCASE内置函数中。

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

使用 C # 6,对于 planRec.provedby 不是字符串的情况,有一种稍微简短一些的方法:

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;

指定一个非空变量而不重复实际的变量名(如果变量为空,则不指定任何内容),您可以使用一个带有 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);

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

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

密码如下:

variable ??= expression;

更多信息是 给你

被接受的答案在给出的时候是及时正确的。

对于仍然发现这个问题的人来说: 今天您可以使用? ? = 操作符。

例如:

private string _test = null;


private void InitIfNull(){
_test ??= "Init";
}