Spl*_*lin 67 .net c# null variable-assignment
我正在varchar从数据库中提取值,并希望设置string我将它们分配为"",如果它们是null.我现在这样做:
if (string.IsNullOrEmpty(planRec.approved_by) == true)
this.approved_by = "";
else
this.approved_by = planRec.approved_by.toString();
Run Code Online (Sandbox Code Playgroud)
似乎应该有一种方法可以在一行中执行以下操作:
this.approved_by = "" || planRec.approved_by.toString();
Run Code Online (Sandbox Code Playgroud)
但是我找不到最佳方法来做到这一点.有更好的方法还是我最好的方法呢?
And*_*are 88
试试这个:
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();
Run Code Online (Sandbox Code Playgroud)
您也可以像其他人所说的那样使用null-coalescing运算符 - 因为没有人给出一个与您的代码一起使用的示例,其中一个:
this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();
Run Code Online (Sandbox Code Playgroud)
但此示例仅起作用,因为可能的值this.approved_by与您希望将其设置为的潜在值之一相同.对于所有其他情况,您将需要使用我在第一个示例中显示的条件运算符.
Dav*_*ard 30
该COALESCE操作符(??)是你想要的,我相信.
nzr*_*tmn 27
从 C# 8.0 开始,您可以使用 ??= 运算符来替换表单的代码
if (variable is null)
{
variable = expression;
}
Run Code Online (Sandbox Code Playgroud)
使用以下代码:
variable ??= expression;
Run Code Online (Sandbox Code Playgroud)
更多信息在这里
Dmi*_*ruk 25
我的猜测是你能想到的最好的
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty
: planRec.approved_by.ToString();
Run Code Online (Sandbox Code Playgroud)
当然,因为你暗示的approved_by是一个object(不能等于"")的事实,这将被重写为
this.approved_by = (planRec.approved_by ?? string.Empty).ToString();
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 24
您正在寻找C#coalesce运算符:??.该运算符采用左右参数.如果运算符的左侧为null或可为空且没有值,则它将返回正确的参数.否则它将返回左侧.
var x = somePossiblyNullValue ?? valueIfNull;
Run Code Online (Sandbox Code Playgroud)
Mal*_*olm 16
对于C#6,planRec.approved_by不是字符串的情况稍微短一些:
this.approved_by = planRec.approved_by?.ToString() ?? "";
Run Code Online (Sandbox Code Playgroud)
Ram*_*rja 13
使用C#coalesce运算符:??
// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YourNullReplacement;
Run Code Online (Sandbox Code Playgroud)
扩展@Dave 的答案 ...如果planRec.approved_by已经是一个字符串
this.approved_by = planRec.approved_by ?? "";
Run Code Online (Sandbox Code Playgroud)