检查空值并在不存在时分配另一个值的最短方法

问题描述 投票:0回答:12

我正在从数据库中提取

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
12个回答
155
投票

试试这个:

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

您还可以像其他人所说的那样使用空合并运算符 - 因为没有人给出与您的代码一起使用的示例,这里是一个:

this.approved_by = planRec.approved_by ?? string.Empty;

但是此示例仅有效,因为

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


91
投票

从 C# 8.0 开始,可以使用

??=
运算符替换表单的代码

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

使用以下代码:

variable ??= expression;

更多信息在这里


66
投票

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

var x = somePossiblyNullValue ?? valueIfNull;

42
投票

我相信,合并运算符 (??) 就是您想要的。


30
投票

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

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();

26
投票

对于 C#6,对于 planRec.approved_by 不是字符串的情况,有一个稍微更短的方法:

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

25
投票

使用 C# 合并运算符:??

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

14
投票

扩展@Dave的答案...如果 planRec.approved_by 已经是一个字符串

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

3
投票

要在不重复实际变量名的情况下分配非空变量(如果变量为空,则不分配任何内容!),您可以使用带有

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);

2
投票

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

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

例如:

private string _test = null;

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

0
投票

您也可以在查询中执行此操作,例如在 sql server、google

ISNULL
CASE
内置函数中。


-4
投票

我使用扩展方法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);
© www.soinside.com 2019 - 2024. All rights reserved.