null-coalescence运算符是否匹配空字符串?

usr*_*ΛΩΝ 4 c# null-coalescing-operator

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

s ?? "default";
Run Code Online (Sandbox Code Playgroud)

要么

(!string.IsNullOrEmpty(s)) ? s : "default";
Run Code Online (Sandbox Code Playgroud)

我认为:因为string.Empty!=null,当我真正想要的是第二个时,合并运算符可以将第一个语句的结果设置为空值.因为字符串是特殊的(==和!=重载到值比较)我只是想请C#专家确认.

谢谢.

Jon*_*eet 15

是的,你是对的 - 它们和你指定的方式不一样.

如果您对第一个表单不满意,可以编写以下扩展名:

public static string DefaultIfNullOrEmpty(this string x, string defaultValue)
{
    return string.IsNullOrEmpty(x) ? defaultValue : x;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以写:

s.DefaultIfNullOrEmpty("default")
Run Code Online (Sandbox Code Playgroud)

在你的主要代码中.