![](/img/trans.png)
[英]Difference in declaring IDisposable member in using block or at using block declaration?
[英]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變量下面會顯示一條警告線,警告說:
可能是對本地'變量'的賦值不正確,它是using
或lock
語句的參數。 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.