.NET是否有办法将空字符串解析为String.Empty?

Ben*_*ter 6 .net c#

我有一个单行方法将空字符串解析为string.Empty,我认为这可能是一个有用的扩展方法 - 但我找不到一个有用的方法来实现它.

我可以看到它有用的唯一方法是作为字符串类的静态方法,因为很明显它不能归因于实例,因为实例为null,这会导致编译器错误.[编辑:编译错误是由于未初始化的变量,我误解了]

我想将它添加到帮助程序类中,但这只会从可发现性角度增加不必要的复杂性.

所以这个问题分为两部分我想:

  1. .NET框架是否有内置的方法将null字符串解析为string.Empty,这是我在过程中遗漏的常识?
  2. 如果没有 - 有没有人知道将此方法添加为字符串类的静态扩展的方法?

提前干杯

编辑:

好吧,我想我应该更清楚一点 - 我已经很清楚空煤化了,而且我正在一个地方使用它,我已经检查了十几个字符串来计算哈希码.

正如你可以想象的那样,紧跟在一起的12行代码都包含了null的运算语法,这是一个眼睛,所以我将null的运算操作移到了一个方法上,让眼睛更方便.然而,这是完美的,它将是字符串对象的完美扩展:

int hashcode =
FirstValue.ResolveNull().GetHashCode() ^
SecondValue.ResolveNull().GetHashCode() ^
...
Run Code Online (Sandbox Code Playgroud)

超过十几行比阅读更容易:

int hashcode =
(FirstValue ?? String.Empty).GetHashCode() ^
(SecondValue ?? String.Empty).GetHashCode() ^
...
Run Code Online (Sandbox Code Playgroud)

当我没有显式地将我的字符串值声明为null但依赖于隐式时,我遇到了编译器问题:

 string s;
Run Code Online (Sandbox Code Playgroud)

但是,如果您明确定义:

string s = null;
Run Code Online (Sandbox Code Playgroud)

你可以很轻松地打电话:

s.ResolveNull();
Run Code Online (Sandbox Code Playgroud)

谢谢大家的意见.

Mat*_*ogg 24

我认为没有内置任何东西.我的第一个想法,以及我经常做的是使用coalesce运算符:

string s = null;
string x = s ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)

  • @Allen - 从语义上讲,这非常清楚用户想要一个空字符串而不是null.如果您将空字符串添加到看似现有字符串的内容中,有人可能会误解该代码究竟应该做什么 (3认同)

Pav*_*aev 6

我能看到它有用的唯一方法是作为字符串类的静态方法,因为很明显它不能归因于实例,因为实例为null,这会导致运行时错误.

可以在null接收器上调用C#3.0扩展方法(因为它们在实践中是静态的),但表现为实例方法.所以只需将其作为扩展方法.

  • 你能够在null上调用扩展方法的观点是100%正确(+1) - 但它通常比空合并更省力. (4认同)