私が String.IsNullOrEmpty を Session 変数で誤用した職場での事件の後、私の仲間の同僚は、私の String.IsNullOrEmpty の使用を受け入れることを拒否しました。いくつかの調査の後、どうやら MSDN の IsNullOrEmpty にリストされているバグがあるようです (リンク) (下部のメモを読んでください):
2006 年 4 月 4 日の時点で、最適化がオンになっているとこのメソッドが失敗するバグ (JIT で発生する可能性があります) があります。C# と VB の両方に影響することが知られています。
詳細については、こちら (リンク) を参照してください。マイクロソフトのバグは「おそらく」Orcas 後に修正されていますが、残念ながら私の雇用主はまだ VS2005 を使用しています。しかし、2008年以降に問題が修正されれば、それで問題ありません。それは私には問題ありません。
私の同僚がIsNullOrEmptyを使用して私のコードを拒否したことは盲目的な無知(IMO)ですが、セッション変数の誤用以外に使用しない理由を彼は確かに教えてくれません。コード全体で IsNullOrEmpty を使用しましたが、問題はありません。個人的には、1 つのステートメントで 2 つのことを行うことに加えて、はるかに読みやすいと思います。
この件に関する意見をグーグルで検索した後、賛否両論のサイトを見つけました。これについて私が読んだサイトのいくつかを次に示します。
https://blog.rthand.com/post/2006/06/22/1063.aspx
http://www.omegacoder.com/?p=105
1 つのサイト ( http://dotnetperls.com/isnullorempty ) は、この方法 (IMHO) をかなりうまくまとめています。
ここでは、文字列型の IsNullOrEmpty メソッドを調べました。これは、文字列を保存または使用してもよいかどうかを確認するための優れた比較的効率的な方法を提供します。ただし、パフォーマンスのためには、手動の null チェックを使用する方がよい場合があります。空の文字列は他の方法でもテストできます。ここでの私の調査では、長さをチェックするのが最も速いことが示されています。
バグ修正が VS2008/2010/etc に適用されている (そして正しく動作している) と仮定すると、VS2005 以降で String.IsNullOrEmpty を使用しない理由はありますか? これは、このようなばかげた小さな方法では少しやり過ぎに思えるかもしれませんが、舞台裏でさらに多くのことが起こっているかどうか、誰かが別の説明を持っているかどうかを知りたいです.