2011-06-10 12 views
0

可能性の重複:
In C#, should I use string.Empty or String.Empty or “” ?string.Emptyを使用すると危険ですか?

私はちょうどthis question/answerに次の文つまずい:C#2.0コンパイラのよう

、へ 非常に少ない点がありますとにかくString.Empty 実際には多くの場合、それは ですコンパイラ は""への参照をインライン化できますが、 はString.Emptyと同じことを実行できません。

このステートメントは正しいですか?したがって、string.Emptyの代わりに常に""を使用する必要がありますか?

ご注意ください:私は(これは読みやすい)コーディングスタイルガイドについては何も求めていません。機能的な違いがあるかどうかを知りたい(インライン展開など)。

+4

http://stackoverflow.com/questions/263191/in-c-should-i-use-string-empty-or-string-empty-or – Prisoner

+0

私は区別や心配をする必要はないと思いますどちらかについてはそれについて。問題を検討するには工学的/思考の時間が浪費されます。いずれの場合でも影響はありません。 (私が言っていることは:「それは問題ではない」)。それは有害ですか?もちろんそうではありませんか? –

+0

答えを少し見てみると(生成されたILはほぼ同じで、生成されたアセンブリはまったく同じです) – BrunoLM

答えて

0

ほとんどの場合、読みやすいものを使用してください。潜在的な可能性はほとんどありません。

IMO ""は読みやすくなります。しかし、他の人はString.Emptyを好む。それは主にスタイルの問題です。

引用符で囲まれた演奏パートは妥当と思われます。 ""はコンパイル時の定数であり、インターンされます。 String.Emptyは静的な読み取り専用フィールドです。コンパイル時にC#コンパイラプログラマがString.Empty""と置き換えることに特別な注意を払っていない限り、まれなシナリオでは若干遅くなるかもしれません。 ""のすべての用途は同じインスタンスを共有し、String.Emptyは非常に同じインスタンスを指すことが予想されます。

""を他の定数と組み合わせて、コンパイラが理解できるようにすると、コンパイル時に式全体が評価されることがあります。 String.Emptyは定数ではないと考えられます。しかし、実際には理にかなった例は考えられません。

例:

string s = ""+"A"+""+"B"+""; 

がより速いかもしれません:

string s = string.Empty+"A"+string.Empty+"B"+string.Empty; 

しかし、もちろんまともな人が書くでしょう:

string s = "AB"; 

しかし、それは、C#プログラマが追加いる可能性がありますその場合は""に置き換えられるString.Emptyの特殊ケース違いは全くありません。

+0

注:この質問は可読性に関するものではありません。 – M4N

+0

あなたはそれを編集した後、私は可読性についての部分を書きました。 – CodesInChaos

+0

はい、私はここにメモを追加しました:-)質問は引用されたステートメントに関するものです。 – M4N

3

このステートメントは正しいですか?

インターナショナルのポイントは、メモリを節約し、比較時間を短縮するための参照を共有することです(リファレンス比較は急速に高速化しています)。 String.EmptyStringクラスのstatic readonlyフィールドであるため、そのクラスのすべての使用はすでに同じ参照を共有しています。したがって、String.Emptyはすでに効果的にインターンシップされています(私は「効果的」と言いましたが、特にあなたのアセンブリでは""の使用を禁止されています)。

string.Emptyの代わりに常に""を使用する必要がありますか?

個人的に私はString.Emptyがはるかに読みやすくなることがわかりました。あなたが好むものを使用してください。パフォーマンスの違いがあれば、ボトルネックになる可能性は非常に低いです。

+0

私も 'String.Empty'を使う傾向があります。それ以外のものがあれば、微妙なバグが一見して似ているような ""と '' "から来るのを防ぎます。 –

+0

インターンリングは同じか、インライン化に関連していますか? – M4N

+1

@ M4N:私は、その引用の著者が「インターナショナル」を意味すると思う。 – jason

1
Console.WriteLine (ReferenceEquals ("", string.Empty) ? "Same Reference" : "Different Reference"); 
// Prints "Same Reference" 

(少なくともMicrosoft版のCLRでは)これはまったく好みのようです。 MONOについて知っている人はいますか?

関連する問題