我拉着 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_byobject(其可以不等于“”),这将被改写为

暗示
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 中 ISNULLCASE 内置函数。

我用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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top