1

違いは何ですか :

ケース 1:

var reader = cmd.ExecuteReader();
using(reader)
{
     while(reader.read())
     {
         DoSomething(ref reader);
     }
}

ケース 2 :

using(var reader = cmd.ExecuteReader())
{
     while(reader.read())
     {
         DoSomething(ref reader);
     }
}

ケース 1: コンパイラ エラーは発生しませんが、usingブロック内のリーダー変数の下に警告行が表示され、次のような警告が表示されます。

usingorlockステートメントの引数であるローカル '変数' への代入が正しくない可能性があります。呼び出しまたはロック解除はDispose、ローカルの元の値で行われます。

http://msdn.microsoft.com/en-us/library/zhdyhfk6%28v=vs.90%29.aspx

usingケース 2 :変数が読み取り専用アクセスに制限されているため、コンパイラ エラーが発生します。

を使用する必要性を無視するとref、これは、ケース 1 でreader変数が破棄されない、または少なくとも「期待どおりに」破棄されることを意味しますか? ケース 1 ではコンパイル エラーが発生しないのに、ケース 2 ではエラーが発生するのはなぜですか?

4

1 に答える 1