2013-06-25 42 views
1

我寫了這個代碼IDisposable比使用塊更簡單的語法?

var doc = new StreamReader(stream).ReadToEnd(); 

但後來我想起了一件應該使用C#的使用塊,以確保StreamReader的的清理處置方法是儘快調用。這給了我這個代碼

string doc; 
using (var reader = new StreamReader(stream)) 
{ 
    doc = reader.ReadToEnd(); 
} 

這更長,更難以閱讀。是否有更簡單的一行語法仍然可以正確使用IDisposable?

+6

「給他們一英寸...」 相結合using -statements

一個注意: - )語法糖的語法糖?空無一人。 – Jon

+2

使用和不發明自行車。 –

+0

你要多少錢?這已經很短了...... – thecoop

回答

0

您可以手動調用Dispose方法是這樣的:

var reader= new StreamReader(stream); 

try 
{ 
    var doc = reader.ReadToEnd(); 
} 
finally 
{ 
    reader.Dispose(); 
} 

這實際上等同於使用語法。但使用仍然是最短的寫法。

+3

這是缺少'使用'的全部觀點,即:異常可能會被拋出。 – Jon

+0

添加'try/finally'並且沒有更多的收穫... – Pragmateek

+0

感謝關於例外的問題。這是完全正確的。我編輯了我的答案。 – studert

0

第3個操作通常需要3行......特別是如果每​​個操作都返回一些內容。

你有兩個選擇:

  1. 所有在一行。
  2. 明確呼籲Dispose()
  3. using ..喜歡它的目的:)

如果多餘的線條就是你擔心..你擔心錯誤的東西。

2

只有一個區塊內的線,你可以簡單地寫

using (var reader = new StreamReader(stream)) 
    doc = reader.ReadToEnd(); 

但是沒有辦法進一步簡化了這一點。 using僅僅是這樣的一些語法糖:

var reader = new StreamReader(stream); 

try 
{ 
    doc = reader.ReadToEnd(); 
} 
finally 
{ 
    reader.Dispose(); 
} 

而且這甚至不妨礙你已經佈置之後訪問對象。所以using實際上是完成工作的簡短方法。如果您正在使用FileStreamStreamReader/StreamWriter工作,你可以簡單地許多using -statements結合一個:

using (var stream = new FileStream(@"C:\Test.txt", FileMode.Open, FileAccess.Read)) 
using (var reader = new StreamReader(stream)) 
{ 
    doc = reader.ReadToEnd(); 
}