我有一个一行代码的方法,可以将null字符串转换为string.Empty。我认为这可能会作为一个扩展方法非常有用,但我无法找到一个实用的方法来实现它。
我唯一能想到的有用方式是将其作为string类的静态方法,因为显然它不能被归属于一个实例,因为该实例是null,这会导致编译器错误。[编辑:编译器错误是由于未初始化变量,我误解了]
我考虑将其添加到帮助程序类中,但这只会从可发现性的角度增加不必要的复杂性。
所以我想这个问题基本上分为两部分:
1. .NET框架是否有内置的将null字符串解析为string.Empty的方法?我是否错过了普遍知道的东西?
2. 如果没有 - 有人知道如何将此方法添加为string类的静态扩展吗?
提前感谢您。
编辑:
好吧,我想我应该再明确一些 - 我已经非常清楚地知道了空合并运算符,而我正在使用它来检查大约十多个字符串,以计算哈希码。
正如您所想象的那样,紧密跟随着彼此的12行代码都包含了空合并语法,这是一个眼酸的事情,所以我将空合并操作移至一个方法中,以使代码更易于阅读。这是完美的,但它会成为string对象的一个完美扩展:
如果您明确定义了以下内容:
感谢大家的参与。
我唯一能想到的有用方式是将其作为string类的静态方法,因为显然它不能被归属于一个实例,因为该实例是null,这会导致编译器错误。[编辑:编译器错误是由于未初始化变量,我误解了]
我考虑将其添加到帮助程序类中,但这只会从可发现性的角度增加不必要的复杂性。
所以我想这个问题基本上分为两部分:
1. .NET框架是否有内置的将null字符串解析为string.Empty的方法?我是否错过了普遍知道的东西?
2. 如果没有 - 有人知道如何将此方法添加为string类的静态扩展吗?
提前感谢您。
编辑:
好吧,我想我应该再明确一些 - 我已经非常清楚地知道了空合并运算符,而我正在使用它来检查大约十多个字符串,以计算哈希码。
正如您所想象的那样,紧密跟随着彼此的12行代码都包含了空合并语法,这是一个眼酸的事情,所以我将空合并操作移至一个方法中,以使代码更易于阅读。这是完美的,但它会成为string对象的一个完美扩展:
int hashcode =
FirstValue.ResolveNull().GetHashCode() ^
SecondValue.ResolveNull().GetHashCode() ^
...
超过十几行的代码比以下代码更易于阅读:
int hashcode =
(FirstValue ?? String.Empty).GetHashCode() ^
(SecondValue ?? String.Empty).GetHashCode() ^
...
当我没有明确将字符串值声明为null,而是依赖于隐式声明时,我遇到了编译器问题:
string s;
如果您明确定义了以下内容:
string s = null;
您可以很容易地调用:
s.ResolveNull();
感谢大家的参与。
String.GetHashCode
无法“处理” null,因为它是一个实例方法,在 C# 中,实例方法通常不应该使用 null 接收器调用。 - Pavel Minaev