C# 这是一个很好的用法吗??操作人员
您好,iam正在使用的程序当前正在使用if、else解决向文本框填充错误值的问题:C# 这是一个很好的用法吗??操作人员,c#,wpf,C#,Wpf,您好,iam正在使用的程序当前正在使用if、else解决向文本框填充错误值的问题: if (!string.IsNullOrWhiteSpace(kundInformation.orgnr)) tbxOrgNr.TextBox.Text = kundInformation.orgnr; else tbxOrgNr.TextBox.Text = ""; 我从未亲自使用过??在此之前,由于应用程序中有数百行类似的代码,
if (!string.IsNullOrWhiteSpace(kundInformation.orgnr))
tbxOrgNr.TextBox.Text = kundInformation.orgnr;
else
tbxOrgNr.TextBox.Text = "";
我从未亲自使用过??在此之前,由于应用程序中有数百行类似的代码,因此很难阅读。是否可以更好地使用:
tbxOrgNr.TextBox.Text = kundInformation.orgnr ?? "";
否。
??
合并运算符将只处理调用IsNull或Whitespace
的一半
现在,你可以做:
但是这是对
Trim()
的额外调用,对于可读性来说不是很好,如果前导/尾随空格很重要,可能也不是您想要做的。否。??
合并操作符将只处理对IsNullOrWhiteSpace
调用的一半
现在,你可以做:
但这是对
Trim()
的额外调用,对于可读性来说不是很好,如果前导/尾随空格很重要,可能也不是您想要做的??是空合并运算符,因此以下两段代码是等效的
if (kundInformation.orgnr!=null)
tbxOrgNr.TextBox.Text = kundInformation.orgnr;
else
tbxOrgNr.TextBox.Text = "";
或:
请注意,null抑制仅检查(或替换用法)null,而不是空字符串
根据评论编辑。是否同意“零合并”一词??是空合并运算符,因此以下两段代码是等效的
if (kundInformation.orgnr!=null)
tbxOrgNr.TextBox.Text = kundInformation.orgnr;
else
tbxOrgNr.TextBox.Text = "";
或:
请注意,null抑制仅检查(或替换用法)null,而不是空字符串
根据注释编辑。同意“空合并”一词是的,但是:这在语义上是不等价的;由于
或空白
,原始代码将使“
变为”
。不过,您可以编写自定义扩展方法:
public static string EmptyIfNullOrWhiteSpace(this string s)
{
return string.IsNullOrWhiteSpace(s) ? "" : s;
}
然后:
是的,但是:这在语义上是不等价的;由于
或空白
,原始代码将使“
变为”
。不过,您可以编写自定义扩展方法:
public static string EmptyIfNullOrWhiteSpace(this string s)
{
return string.IsNullOrWhiteSpace(s) ? "" : s;
}
然后:
否。
??
仅检查空值,不检查空/空白
改为创建扩展方法:
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);
否。
??
仅检查空值,不检查空/空白
改为创建扩展方法:
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);
您混淆了三元运算符(?)和??操作人员您的示例应使用三元运算符:
if (!string.IsNullOrWhiteSpace(kundInformation.orgnr))
tbxOrgNr.TextBox.Text = kundInformation.orgnr;
else
tbxOrgNr.TextBox.Text = "";
同:
tbxOrgNr.TextBox.Text = (!string.IsNullOrWhiteSpace(kundInformation.orgnr) ?
kundInformation.orgnr : "";
if (kundInformation.orgnr == null) tbxOrgNr.TextBox.Text = "";
else tbxOrgNr.TextBox.Text = kundInformation.orgnr;
您可以在MSDN的页面上找到关于三元运算符的更多信息
??
运算符不同,因为它只检查null
,所以
tbxOrgNr.TextBox.Text = kundInformation.orgnr ?? "";
实际上与:
tbxOrgNr.TextBox.Text = (!string.IsNullOrWhiteSpace(kundInformation.orgnr) ?
kundInformation.orgnr : "";
if (kundInformation.orgnr == null) tbxOrgNr.TextBox.Text = "";
else tbxOrgNr.TextBox.Text = kundInformation.orgnr;
您可以从MSDN的页面上找到更多关于
?
运算符的信息。您混淆了三元运算符(?)和??操作人员您的示例应使用三元运算符:
if (!string.IsNullOrWhiteSpace(kundInformation.orgnr))
tbxOrgNr.TextBox.Text = kundInformation.orgnr;
else
tbxOrgNr.TextBox.Text = "";
同:
tbxOrgNr.TextBox.Text = (!string.IsNullOrWhiteSpace(kundInformation.orgnr) ?
kundInformation.orgnr : "";
if (kundInformation.orgnr == null) tbxOrgNr.TextBox.Text = "";
else tbxOrgNr.TextBox.Text = kundInformation.orgnr;
您可以在MSDN的页面上找到关于三元运算符的更多信息
??
运算符不同,因为它只检查null
,所以
tbxOrgNr.TextBox.Text = kundInformation.orgnr ?? "";
实际上与:
tbxOrgNr.TextBox.Text = (!string.IsNullOrWhiteSpace(kundInformation.orgnr) ?
kundInformation.orgnr : "";
if (kundInformation.orgnr == null) tbxOrgNr.TextBox.Text = "";
else tbxOrgNr.TextBox.Text = kundInformation.orgnr;
您可以从MSDN的页面上找到有关
??运算符的更多信息。否,这不是因为??仅检查null
您可以使用此选项:
tbxOrgNr.TextBox.Text =
(!string.IsNullOrWhiteSpace(kundInformation.orgnr)) ? kundInformation.orgnr : "";
这与您的if
语句基本相同。否,这不是因为?
只检查null
您可以使用此选项:
tbxOrgNr.TextBox.Text =
(!string.IsNullOrWhiteSpace(kundInformation.orgnr)) ? kundInformation.orgnr : "";
这与您的if
语句基本相同。您将得到另一个结果。在第一个例子中,如果kundInformation.orgnr
只包含空格字符,它们将在空字符串中更改。但在第二种情况下,不是吗t@Sivasubramanian:WPF标签的动机是,纯WPF解决方案可能是最干净的。因此,您的编辑无效。您将得到另一个结果。在第一个例子中,如果kundInformation.orgnr
只包含空格字符,它们将在空字符串中更改。但在第二种情况下,不是吗t@Sivasubramanian:WPF标签的动机是,纯WPF解决方案可能是最干净的。所以你的编辑是无效的。为什么这个答案得到了两张反对票?这似乎有点苛刻,因为这里没有什么不正确的地方。在OPs情况下,答案应该是No
。对于不是“良好使用???运算符”的OP简单地说,因为这些语句在语义上是不等价的。@ McCravell:我理解你提到标题,但我仍然认为,要正确回答这个问题,就必须考虑整个问题,而不仅仅是标题。@萨尼,同样地,要正确地回答一个问题,就必须考虑整个答案。不仅仅是第一个字。我已经回答了问题的所有要点。请告诉我一些与我没有提到的问题相关的东西。@MarcGravel这是你的特权,而不是由我来决定你应该如何写你的答案。我只能投我的一票,并解释我选择的原因。为什么这个答案得到两张反对票?这似乎有点苛刻,因为这里没有什么不正确的地方。在OPs情况下,答案应该是No
。对于不是“良好使用???运算符”的OP简单地说,因为这些语句在语义上是不等价的。@ McCravell:我理解你提到标题,但我仍然认为,要正确回答这个问题,就必须考虑整个问题,而不仅仅是标题。@萨尼,同样地,要正确地回答一个问题,就必须考虑整个答案。不仅仅是第一个字。我已经回答了问题的所有要点。请给我看一些相关的东西