簡體   English   中英

IDisposable的語法比使用block更簡單?

[英]Simpler syntax for IDisposable than using block?

我寫了這段代碼

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

但是后來我記得一個人應該使用C#的using塊來確保StreamReader的清理方法Dispose盡快被調用。 這給了我這個代碼

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

那更長,更難讀。 有沒有一種更簡單的單行語法仍然可以正確地使用IDisposable的東西?

塊內只有一行,您可以簡單地編寫

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

但是,沒有辦法進一步簡化它。 using只是一些語法糖,例如:

var reader = new StreamReader(stream);

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

而且,這甚至還不能阻止您在對象被處置后訪問它。 因此, using實際上是完成工作的捷徑。

關於using -statement組合的一個注釋:如果使用FileStreamStreamReader / StreamWriter ,則可以簡單地將許多using -statement組合為一個:

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

您可以像這樣手動調用dispose方法:

var reader= new StreamReader(stream);

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

實際上,這等效於using語法。 但是使用仍然是編寫它的最短方法。

3號操作通常需要3行。

您有兩種選擇:

  1. 全部在一線。
  2. 顯式調用Dispose()
  3. using ..像預期的那樣:)

如果多余的行是您擔心的..您擔心的是錯誤的事情。

暫無
暫無

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

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