簡體   English   中英

定位使用塊的區別

[英]Difference in positioning a using block

有什么區別:

情況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塊內的reader變量下面會顯示一條警告線,警告說:

可能是對本地'變量'的賦值不正確,它是usinglock語句的參數。 Dispose調用或解鎖將發生在本地的原始值上。

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

情況2:由於限制using變量進行只讀訪問,它會產生編譯器錯誤。

忽略使用ref的必要性,這是否意味着在案例1中, reader變量不會被處理,或至少“按預期”處理? 為什么案例1不會產生任何編譯器錯誤,但案例2呢?

using語句中聲明的變量是只讀的(初始化后不能分配它們)。
因此,您不能將它們作為ref參數傳遞,因為要指定ref參數點。

在你的第一個例子中,變量未在聲明 using語句,所以它不是只讀的。

它給出了編譯器警告,原因與第二個變量是只讀的相同。

原因是(作為警告狀態) using語句只會處理變量的原始值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM