2010-08-11 167 views
2

爲什麼我不能在try塊中分配對象變量?爲什麼我不能在try塊中分配對象變量?

如果我試圖做到這一點,清理在finally塊我得到一個編譯錯誤變量:「使用未分配的局部變量的」。這是沒有意義的,因爲變量是在try塊之前聲明的,而在finally塊中,我首先檢查變量是否爲null

爲什麼不能編譯下面的代碼?我正在檢查dbc是否爲null,因此沒有機會嘗試使用未分配的變量進行操作。

如:

DbConnection dbc; 
try { 
    dbc = <some method call returning an open DbConnection> 
    // do stuff 
} catch (Exception e) { // do stuff } 
finally { 
    if (dbc != null) { 
     dbc.Close(); 
    } 
} 
+0

怎樣去除設置關鍵字? – SteveCav 2010-08-11 03:08:45

+0

也許相關:http://stackoverflow.com/questions/94977/why-arent-variables-declared-in-try-in-scope-in​​-catch-or-finally – cofiem 2010-08-11 03:10:24

+0

我敢打賭,Jon Skeet會從無處出現,獲得最佳答案獎。打哈欠。 – 2010-08-11 03:21:23

回答

12

更改您的聲明DbConnection dbc = null;因此編譯器能確切知道的變量分配。 (僅僅聲明dbc是不一樣爲它指定一個null值,你必須明確與當地。)

現有的代碼失敗的原因是,它是完全有可能的DBC之前發生異常已設置。因此,編譯器無法假定在執行finally塊時分配了dbc。

有關詳細信息,請參見有關明確分配的語言規範的第5.3節。

http://msdn.microsoft.com/en-us/library/aa691172(VS.71).aspx

+0

如果它沒有被賦值,這個變量肯定是空的嗎? – CJ7 2010-08-11 03:11:14

+0

@克雷格,不,變量只是未分配的。 'null'並不構成缺少任務。 – 2010-08-11 03:12:21

+0

這是C#特有的嗎?我不記得任何其他語言。 – CJ7 2010-08-11 03:13:49

1

更改此

DbConnection dbc; 

這個

DbConnection dbc = null; 
相關問題