在工作中我将 String.IsNullOrEmpty 与 Session 变量一起误用后,我的一个同事现在拒绝接受我对 String.IsNullOrEmpty 的使用。经过一番研究,显然在 MSDN 上列出了 IsNullOrEmpty 的错误(链接)(阅读底部的注释):
截至 2006 年 4 月 4 日,存在一个错误(可能在 JIT 中),当启用优化时,该错误会导致此方法失败。众所周知,它会影响 C# 和 VB。
更多信息可以在这里找到(链接)。微软这个错误“据说”是在 Orcas 之后修复的,但不幸的是我的雇主仍然使用 VS2005。但如果问题在 2008+ 年得到解决,那就这样吧。这对我来说很好。
虽然我的同事拒绝我的 IsNullOrEmpty 代码对我来说是盲目的无知 (IMO),但他当然不能告诉我为什么不使用它,而不是滥用 session 变量。我在整个代码中都使用了 IsNullOrEmpty,没有任何问题。就个人而言,除了在一个语句中做两件事之外,我发现它更具可读性。
在谷歌上搜索有关该主题的意见后,我发现了采取赞成/反对立场的网站。以下是我读过的一些网站:
https://blog.rthand.com/post/2006/06/22/1063.aspx
http://www.omegacoder.com/?p=105
一个站点(http://dotnetperls.com/isnullorempty)很好地总结了该方法(恕我直言):
在这里,我们查看了字符串类型的 IsNullOrEmpty 方法,它为我们提供了一种很好且相对有效的方法来检查字符串是否可以保存或使用。但是,出于性能考虑,使用手动空值检查可能会更好。空字符串也可以通过其他方式进行测试,我这里的研究表明检查长度是最快的。
假设错误修复在 VS2008/2010/等中已经到位(并且工作正常),是否有任何理由不将 String.IsNullOrEmpty 与 VS2005 及更高版本一起使用?我意识到这对于这种愚蠢的小方法来说似乎有点矫枉过正,但我想知道幕后是否还有更多的事情发生,以及是否有人有其他解释。