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、googleISNULL
和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;