コードに対してStyleCopを実行していますが、SA1122の推奨事項の1つは、空の文字列を値に割り当てるときに ""ではなくstring.Emptyを使用することです。
私の質問は、これがベストプラクティスと見なされる理由です。または、これはベストプラクティスと見なされますか?私は2つのステートメントの間にコンパイラの違いがないと仮定しているので、それは読みやすいものだと思うことができますか?
コードに対してStyleCopを実行していますが、SA1122の推奨事項の1つは、空の文字列を値に割り当てるときに ""ではなくstring.Emptyを使用することです。
私の質問は、これがベストプラクティスと見なされる理由です。または、これはベストプラクティスと見なされますか?私は2つのステートメントの間にコンパイラの違いがないと仮定しているので、それは読みやすいものだと思うことができますか?
回答:
2つの理由があると思います。1つは読みやすさで、もう2つはパフォーマンスが少し向上するからです。
読みやすさは簡単です:を見つけるstring.Empty
よりもはるかに高速です""
。string.Empty
一般に、文字列を検索するよりも、文字列を検索する方が簡単で、おそらくより正確です。また、意図を明確にします。タイプミスをしたり、何かを忘れるだけでなく、本当に空の文字列が必要でした。
パフォーマンスの理由は、実習によるものです。ランタイムは、以前に使用された文字列のテーブルを保持しているため、実際に文字ごとのチェックを行うことなく、文字列比較をすばやく実行できます。 リテラルを入力するとインターンされたバージョンが得られない可能性string.Empty
があるため、すでにインターンされた""
場所への参照です。したがって、パフォーマンスがわずかに低下します。
私が見つけたいくつかのドキュメントによると、それはコンパイラーによって出力されるものに関係しています。
クイック検索で明らかになります:http : //stylecop.soyuz5.com/SA1122.html
その説明と共に「読みやすさのルール」の下に提出された理由は不可解です。
""
が、ではないstring.Empty