检查空值并在不存在时分配另一个值的最短方法
-
13-09-2019 - |
题
我拉着 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) ? "" : planRec.approved_by.toString();
您也可以使用空合并运算符其他说 - 因为没有人给与您的代码在这里工作的一个例子是:
this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();
但这个例子只能因为对于this.approved_by
的可能值是一样的,你希望将其设定为电位值之一。对于所有其他情况下,你将需要使用条件运算符,因为我在我的第一个例子说明。
其他提示
在 COALESCE操作符(??)是你想要什么,我相信。
我的猜测是,你能拿出最好的是
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#COALESCE操作:??。该运营商需要一个左,右的说法。如果操作员的左侧为空或可为空,没有值将返回正确的说法。否则,它将返回左侧。
var x = somePossiblyNullValue ?? valueIfNull;
使用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;
延长 @戴夫的回答...如果 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);
您也可以在查询中执行此操作,例如在 sql server、google 中 ISNULL
和 CASE
内置函数。
我用extention方法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);
不隶属于 StackOverflow