如何编写NullOrEmpty合并运算符

Jer*_*eir 3 c#

是否可以将新的运算符添加到类似于的String类中

string val = anotherVal ??? "Default Val";
Run Code Online (Sandbox Code Playgroud)

和工作一样

string val = !String.IsNullOrEmpty(anotherVal) ? anotherVal : "Default Val";
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

您不能为字符串类定义自己的运算符,并从C#中使用它们.(F#允许您为任意类创建运算符,有点像扩展方法,但对于其他成员类型.)

可以做的是写一个扩展方法:

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

并称之为:

string val = anotherValue.DefaultIfEmpty("Default Val");
Run Code Online (Sandbox Code Playgroud)

如果你不想评估"默认"字符串,除非需要它,你可能会有一个过载函数:

public static string DefaultIfEmpty(this string original,
                                    Func<string> defaultValueProvider)
{
    return string.IsNullOrEmpty(original) ? defaultValueProvider() : original;
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

string val = anotherValue.DefaultIfEmpty(() => "Default Val");
Run Code Online (Sandbox Code Playgroud)