当前位置:  开发笔记 > 编程语言 > 正文

我不喜欢这个...这是欺骗语言吗?

如何解决《我不喜欢这个这是欺骗语言吗?》经验,为你挑选了4个好方法。

我已经看过几次以下的东西......而且我讨厌它.这基本上是"欺骗"的语言吗?或者..你会认为这是'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例外...在代码的不同位置生成的异常时遇到此问题.所以当我看到上面的代码时,除了其他所有内容之外,我的挫败感从那里开始.)



1> JaredPar..:

您正在利用称为短路的语言功能.这并不是欺骗语言,而是实际上使用的功能完全是如何设计使用的.


@Sylvain,同意聪明的代码更难维护.但是这段代码并没有试图变得聪明.它正在使用一种众所周知的语言功能.这也不仅仅是一个C#功能,它几乎是任何语言的特色(C++,F#,VB.Net,C#,C等......).期望其他程序员理解该代码的预期功能是完全合理的
+1 - 这是C,C++,C#,Perl,Python,Ruby,PHP中非常标准的做法......
+1 - 完全正确.我认为这是一个非常标准的做法
@Sylvain:如果你不了解你的专业工具的基础知识(以及一个短路布尔运算符_is_基础),那么你不应该接触生产代码.

2> Mike Kucera..:

如果你问,如果它的确定依赖于"短路"关系运算符&&||,然后是多数民众赞成完全罚款.


它不仅很好,而且我认为大多数人会认为它是一种语言功能

3> James Black..:

这没有什么不对,因为你只是想确定你不会得到一个nullpointer异常.

我认为这样做是合理的.

使用扩展程序,您可以使其更清晰,但基本概念仍然有效.



4> bendewey..:

这段代码完全有效,但我喜欢使用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.
}


但是,这会改变变量的值,这并不总是令人满意的.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有