99

我正在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();

但是我找不到执行此操作的最佳方法。有更好的方法还是我有最好的方法?

4

12 回答 12

124

试试这个:

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

您也可以像其他人所说的那样使用 null-coalescing 运算符 - 因为没有人给出适用于您的代码的示例,这里是一个:

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

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

于 2009-07-13T16:29:27.670 回答
39

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

于 2009-07-13T16:29:53.507 回答
39

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

var x = somePossiblyNullValue ?? valueIfNull;
于 2009-07-13T16:31:28.197 回答
35

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

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

使用以下代码:

variable ??= expression;

更多信息在这里

于 2019-10-07T12:55:30.967 回答
27

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

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();
于 2009-07-13T16:33:40.627 回答
25

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

this.approved_by = planRec.approved_by?.ToString() ?? "";
于 2016-07-07T15:06:19.680 回答
18

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

// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YourNullReplacement;
于 2017-07-17T01:57:20.727 回答
11

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

this.approved_by = planRec.approved_by ?? "";
于 2009-07-13T16:33:58.130 回答
2

要在不重复实际变量名称的情况下分配非空变量(如果变量为空,则不分配任何内容!),您可以使用带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);
于 2017-08-24T14:00:32.757 回答
1

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

于 2009-07-13T17:19:44.107 回答
1

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

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

例如:

private string _test = null;

private void InitIfNull(){
 _test ??= "Init";
}
于 2021-09-23T12:13:36.960 回答
-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);
于 2015-11-05T23:47:36.613 回答