我正在从数据库中提取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();
然而,我无法找到最佳方法。有没有更好的方式或者我有最好的方法呢?
答案 0 :(得分:82)
试试这个:
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();
您也可以像其他人所说的那样使用null-coalescing运算符 - 因为没有人给出一个与您的代码一起使用的示例,其中一个是:
this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();
但是此示例仅起作用,因为this.approved_by
的可能值与您希望将其设置为的潜在值之一相同。对于所有其他情况,您将需要使用条件运算符,如我在第一个示例中所示。
答案 1 :(得分:28)
我相信coalesce operator (??)就是你想要的。
答案 2 :(得分:24)
我的猜测是你能想到的最好的
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();
答案 3 :(得分:20)
您正在寻找C#coalesce运算符:??。该运算符采用左右参数。如果运算符的左侧为null或可以为null且没有值,则它将返回正确的参数。否则它将返回左侧。
var x = somePossiblyNullValue ?? valueIfNull;
答案 4 :(得分:11)
对于C#6,planRec.approved_by不是字符串的情况稍微短一些:
this.approved_by = planRec.approved_by?.ToString() ?? "";
答案 5 :(得分:9)
使用C#coalesce运算符:??
// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YourNullReplacement;
答案 6 :(得分:8)
扩展@Dave's answer ...如果planRec.approved_by已经是字符串
this.approved_by = planRec.approved_by ?? "";
答案 7 :(得分:5)
从C#8.0开始,您可以使用?? =运算符替换表单代码
if (variable is null)
{
variable = expression;
}
具有以下代码:
variable ??= expression;
更多信息为here
答案 8 :(得分:2)
要分配非空变量而不重复实际变量名称(如果变量为null,则不指定任何内容!),您可以使用带有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);
答案 9 :(得分:1)
您也可以在查询中执行此操作,例如在sql server,google ISNULL
和CASE
内置函数中。
答案 10 :(得分:-3)
我使用扩展方法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);