Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查空值并指定另一个值(如果不是)的最短方法_C#_.net_Null_Variable Assignment - Fatal编程技术网

C# 检查空值并指定另一个值(如果不是)的最短方法

C# 检查空值并指定另一个值(如果不是)的最短方法,c#,.net,null,variable-assignment,C#,.net,Null,Variable Assignment,我正在从数据库中提取varchar值,并希望将字符串设置为如果null则将其赋值为“”。我现在是这样做的: if (string.IsNullOrEmpty(planRec.approved_by) == true) this.approved_by = ""; else this.approved_by = planRec.approved_by.toString(); 似乎应该有一种方法可以在一行中这样做: this.approved_by = "" || planRec.appr

我正在从数据库中提取
varchar
值,并希望将
字符串设置为
如果
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();
然而,我找不到一个最佳的方法来做到这一点。有更好的方法吗?或者我有最好的方法吗?

试试这个:

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();
您也可以像其他人所说的那样使用空合并运算符-因为没有人给出与您的代码一起工作的示例,这里是一个:

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

我相信这就是您想要的。

您正在寻找C#coalesce运算符:??。此运算符接受左参数和右参数。如果运算符的左侧为null或不带值的可为null,则它将返回右侧参数。否则它将返回左侧

var x = somePossiblyNullValue ?? valueIfNull;

我猜你能想出的最好办法是

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty
                                                      : planRec.approved_by.ToString();
当然,因为您暗示了这样一个事实,即
approved\u by
是一个
对象(不能等于“”),所以这将被重写为

this.approved_by = (planRec.approved_by ?? string.Empty).ToString();
如果planRec.approved_by已经是字符串,则扩展

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

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

我使用扩展方法SelfChk

static class MyExt {
//Self Check 
 public static void SC(this string you,ref string me)
    {
        me = me ?? you;
    }
}
然后使用like

string a = null;
"A".SC(ref a);
对于C#6,对于planRec.approved#u by不是字符串的情况,有一种略短的方法:

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;

要在不重复实际变量名称的情况下分配非空变量(如果变量为null,则不分配任何内容!),可以使用带有
操作
参数的小助手方法:

public static void CallIfNonEmpty(string value, Action<string> action)
{
    if (!string.IsNullOrEmpty(value))
        action(value);
}
从C#8.0开始,可以使用???=运算符替换表单的代码

if (variable is null)
{
    variable = expression;
}
使用以下代码:

variable ??= expression;

更多信息是

是的……但这仅仅是因为默认值为“”。嗯,这是怎么回事?可以使用任何表达式将null替换为....The==true在这里是多余的..这个null合并运算符不会抛出null引用吗?我对这段代码的理解如下:
如果(planRec.approved_by==null){this.approved_by=planRec.approved_by.toString();/@Destrictor是正确的,代码就被破坏了。下面是一个使用另一个有趣操作符的修复:
this.approved_by=planRec.approved_by?.toString()
我猜你的意思是,但不容易阅读和理解,是吗?Ups!你完全正确:非常简短,但不容易阅读和理解(至少如果你不习惯这种符号)在这种情况下,试着读一本书。你会发现这本书非常详细而且容易理解:p这个答案并没有涵盖问题的所有情况(只是部分)。注意,这里有“string.IsNullOrEmpty”。所以这里不处理空的情况。因为这是我一直在寻找的答案(我只需要空检查)我不知道为什么这个答案是第八多票:/有VB.net版本的吗?
variable ??= expression;