我已经看过几次以下的东西......而且我讨厌它.这基本上是"欺骗"的语言吗?或者..你会认为这是'ok',因为IsNullOrEmpty会一直被评估吗?
(我们可以争论一个字符串在函数出现时是否应该为NULL,但这不是问题.)
string someString; someString = MagicFunction(); if (!string.IsNullOrEmpty(someString) && someString.Length > 3) { // normal string, do whatever } else { // On a NULL string, it drops to here, because first evaluation of IsNullOrEmpty fails // However, the Length function, if used by itself, would throw an exception. }
编辑: 再次感谢大家提醒我这种语言的基础.虽然我知道"为什么"它起作用,但我无法相信我不知道/记住这个概念的名称.
(如果有人想要任何背景..我在解决由NULL字符串和.Length> x例外...在代码的不同位置生成的异常时遇到此问题.所以当我看到上面的代码时,除了其他所有内容之外,我的挫败感从那里开始.)
您正在利用称为短路的语言功能.这并不是欺骗语言,而是实际上使用的功能完全是如何设计使用的.
如果你问,如果它的确定依赖于"短路"关系运算符&&
和||
,然后是多数民众赞成完全罚款.
这没有什么不对,因为你只是想确定你不会得到一个nullpointer异常.
我认为这样做是合理的.
使用扩展程序,您可以使其更清晰,但基本概念仍然有效.
这段代码完全有效,但我喜欢使用Null Coalesce Operator来避免空类型检查.
string someString = MagicFunction() ?? string.Empty; if (someString.Length > 3) { // normal string, do whatever } else { // NULL strings will be converted to Length = 0 and will end up here. }