如何编写Null或Empty合并运算符

时间:2009-05-27 22:09:19

标签: c#

是否可以向String类添加一个新的运算符,类似于

string val = anotherVal ??? "Default Val";

并且像

一样工作
string val = !String.IsNullOrEmpty(anotherVal) ? anotherVal : "Default Val";

1 个答案:

答案 0 :(得分:8)

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

可以做的是编写扩展方法:

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

并将其命名为:

string val = anotherValue.DefaultIfEmpty("Default Val");

如果您不想评估“默认”字符串,除非需要它,您可能会超载一个函数:

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

并将其命名为:

string val = anotherValue.DefaultIfEmpty(() => "Default Val");