3

最近、次の行に遭遇しました。

StringBuilder sb = default(StringBuilder);
sb = new StringBuilder();

私は単にステートメントを次のように書きます

StringBuilder sb = new StringBuilder();

default(StringBuilder) ステートメントを使用する利点は何ですか?

すべての素晴らしいフィードバックに基づいて、新しい質問を思いつきました。

編集: このようなことをすることの利点または欠点がわかりますか? (それはコンパイルします)

var sb = default(StringBuilder);

繰り返しになりますが、スコープの問題があるかどうかを調べていると思いますが、最大の問題はオブジェクトが適切に初期化されていない可能性があります。あなたの考えは何ですか?

4

4 に答える 4

4

一般的に、何もありません。変数を初期化してから、コードの次の行で設定する理由はありません。あなたの2番目のステートメントはよりクリーンです。

宣言と割り当てを分割する理由はほとんどありません。これは通常、割り当ての周りで例外処理を使用しようとするなど、スコープの問題が関係する場合にのみ必要です。

StringBuilder sb = null;

try
{
    // Using a statement that may throw
    sb = GetAStringBuilder();
}
catch
{
    //...
}

// The compiler will warn about a potentially 
// uninitalized variable here without the default assignment
if (sb != null)  
{
    //...

この場合、ローカル スコープ ( try) 内で割り当てを行うため、2 つを分割する必要があります。

そうでない場合は、それらを一緒に保管することをお勧めします。

于 2012-08-14T20:32:06.487 に答える
3

利点はまったくありません。2 番目のスニペットは、より簡潔で読みやすくなっています。

于 2012-08-14T20:32:19.967 に答える
2

使用する利点はdefault、パラメーター化された型で機能するジェネリッククラスを開発する場合にのみ現れます。型が参照型なのか、値型なのか、構造体なのかわからない場合があります。defaultキーワードは、null参照型と0数値型を返します。

詳細については、http://msdn.microsoft.com/en-us/library/xwth0h0d%28v=vs.80%29.aspxを参照してください。

于 2012-08-14T20:38:37.297 に答える
2

default キーワードは、ジェネリック型の初期化でよく使用されます。値型 (たとえばゼロに初期化) を扱っているのか、参照型 (null に初期化) を扱っているのかが定かではありません。他の回答によると、あなたが提供した例では、 StringBuilder を初期化してすぐに再割り当てしたり、デフォルトのキーワードを使用したりする目的はほとんどありません。

.net 3.5 には、遭遇する可能性のある追加の規則が 1 つあります。

var sb = new StringBuilder();

ここで、sb の型は割り当ての RHS から推測されます。

于 2012-08-14T20:42:36.970 に答える