我正在从数据库中提取
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();
但是我找不到最佳方法来做到这一点。 有更好的方法还是我有最好的方法?
试试这个:
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty : planRec.approved_by.toString();
您还可以像其他人所说的那样使用空合并运算符 - 因为没有人给出与您的代码一起使用的示例,这里是一个:
this.approved_by = planRec.approved_by ?? string.Empty;
但是此示例仅有效,因为
this.approved_by
的可能值与您希望将其设置为的潜在值之一相同。 对于所有其他情况,您将需要使用条件运算符,如我在第一个示例中所示。
从 C# 8.0 开始,可以使用
??=
运算符替换表单的代码
if (variable is null)
{
variable = expression;
}
使用以下代码:
variable ??= expression;
更多信息在这里
您正在寻找 C# 合并运算符:??。 该运算符采用左参数和右参数。 如果运算符的左侧为 null 或可以为 null 且没有值,则它将返回右侧参数。 否则它将返回左侧。
var x = somePossiblyNullValue ?? valueIfNull;
我相信,合并运算符 (??) 就是您想要的。
我的猜测是你能想到的最好的就是
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();
对于 C#6,对于 planRec.approved_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;
扩展@Dave的答案...如果 planRec.approved_by 已经是一个字符串
this.approved_by = planRec.approved_by ?? "";
要在不重复实际变量名的情况下分配非空变量(如果变量为空,则不分配任何内容!),您可以使用带有
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);
接受的答案在给出时是及时正确的。
对于仍然发现这个问题的人: 今天您可以使用 ??= 运算符。
例如:
private string _test = null;
private void InitIfNull(){
_test ??= "Init";
}
您也可以在查询中执行此操作,例如在 sql server、google
ISNULL
和 CASE
内置函数中。
我使用扩展方法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);