5

我有一个非常简单的 C# 问题:以下语句在处理空字符串时不相等吗?

s ?? "default";

或者

(!string.IsNullOrEmpty(s)) ? s : "default";

我认为:因为string.Empty!=null,当我真正想要的是第二个时,合并运算符可能会将第一个语句的结果设置为空值。由于字符串在某种程度上是特殊的(== 和!= 被重载以进行值比较),我只是想请 C# 专家确认。

谢谢你。

4

1 回答 1

15

是的,你是对的 - 它们不一样,并且以你指定的方式。

如果你对第一种形式不满意,你可以写一个扩展:

public static string DefaultIfNullOrEmpty(this string x, string defaultValue)
{
    return string.IsNullOrEmpty(x) ? defaultValue : x;
}

然后你可以写:

s.DefaultIfNullOrEmpty("default")

在您的主要代码中。

于 2011-02-02T01:49:18.747 回答