这是一个很好用的??运营商?

时间:2014-07-11 11:15:18

标签: c# wpf

您正在使用的程序目前正在使用if,否则用于解决向文本框填充错误值的问题:

        if (!string.IsNullOrWhiteSpace(kundInformation.orgnr))
            tbxOrgNr.TextBox.Text = kundInformation.orgnr;
        else
            tbxOrgNr.TextBox.Text = "";

我从未亲自使用过?因为它在应用程序中有数百个类似的代码行,所以很难阅读。可能更好用:

tbxOrgNr.TextBox.Text = kundInformation.orgnr ?? "";

6 个答案:

答案 0 :(得分:5)

没有。 ??合并运算符仅处理IsNull调用的IsNullOrWhiteSpace部分。


现在,你可以做:

tbxOrgNr.TextBox.Text = (kundInformation.orgnr ?? "").Trim();

但这是对Trim()的额外调用,对可读性不是很好,如果前导/尾随空格很重要,也许不是你想要做的事情。

答案 1 :(得分:3)

没有。 ??仅检查null而不是空/空格。

改为创建扩展方法:

public static class StringExtensions
{
    public static string ValueOrEmpty(this string value)
    {
        if (!string.IsNullOrWhiteSpace(value))
            return value;
        else
            return "";

    }
}

然后你可以这样使用:

tbxOrgNr.TextBox.Text = kundInformation.orgnr.ValueOrEmpty();

当然,您也可以通过另一种方式来生成更具可读性的代码:

public static class TextBoxExtensions
{
    public static void SetTextOrEmpty(this TextBox tb, string value)
    {
        if (!string.IsNullOrWhiteSpace(value))
            tb.Text = value;
        else
            tb.Text = "";

    }
}

这提供了更好的任务:

tbxOrgNr.TextBox.SetTextOrEmpty(kundInformation.orgnr);

答案 2 :(得分:2)

不,不是因为??只检查null

你可以改用它:

tbxOrgNr.TextBox.Text = 
    (!string.IsNullOrWhiteSpace(kundInformation.orgnr)) ? kundInformation.orgnr : "";

这与您的if声明基本相同。

答案 3 :(得分:0)

是的,但是:这在语义上并不等同;由于" ",原始代码会使""变为OrWhiteSpace。但是,您可以编写自定义扩展方法:

public static string EmptyIfNullOrWhiteSpace(this string s)
{
    return string.IsNullOrWhiteSpace(s) ? "" : s;
}

然后:

tbxOrgNr.TextBox.Text = kundInformation.orgnr.EmptyIfNullOrWhiteSpace();

答案 4 :(得分:0)

你把三元运算符(?)的使用与??混淆了运营商。您的示例应使用三元运算符:

if (!string.IsNullOrWhiteSpace(kundInformation.orgnr))
    tbxOrgNr.TextBox.Text = kundInformation.orgnr;
else
    tbxOrgNr.TextBox.Text = "";

与:

相同
tbxOrgNr.TextBox.Text = (!string.IsNullOrWhiteSpace(kundInformation.orgnr) ? 
    kundInformation.orgnr : "";

您可以在MSDN上的?: Operator (C# Reference)页面找到有关三元运算符的更多信息。

??运算符不同,因为它只检查null,所以

tbxOrgNr.TextBox.Text = kundInformation.orgnr ?? "";

实际与:

相同
if (kundInformation.orgnr == null) tbxOrgNr.TextBox.Text = "";
else tbxOrgNr.TextBox.Text = kundInformation.orgnr;

您可以在MSDN上的?? Operator (C# Reference)页面上找到有关??运算符的更多信息。

答案 5 :(得分:-1)

??是一个空合并运算符,因此以下两段代码是等价的

if (kundInformation.orgnr!=null)
            tbxOrgNr.TextBox.Text = kundInformation.orgnr;
        else
            tbxOrgNr.TextBox.Text = "";

OR:

tbxOrgNr.TextBox.Text = kundInformation.orgnr ?? "";

请注意,null抑制仅检查(或替换用法)null,而不是空字符串。

根据评论编辑。同意“null-coalescing”一词