嵌套使用语句的最佳实践?

co2*_*f2e 12 .net c# using-statement

我有一个代码块如下,我使用3个嵌套using块.

我发现使用try finally块我可以避免这种情况但是如果有两个以上的使用语句,那么最好的方法是什么?

private FileStream fileStream = null;
private Document document = null;
private PdfWriter pdfWriter =  null;

using (fileStream = new FileStream("ABC.pdf", FileMode.Create))
{
    using (document = new Document(PageSize.A4, marginLeft, marginRight, marginTop, marginBottom))
    {
        using (pdfWriter = PdfWriter.GetInstance(document, fileStream))
        {
            document.AddAuthor(metaInformation["author"]);
            document.AddCreator(metaInformation["creator"]);
            document.AddKeywords("Report Generation using I Text");
            document.AddSubject("Document subject");
            document.AddTitle("The document title");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jan*_*mer 13

您可以通过以下方式删除嵌套缩进:

using (var fileStream = new FileStream("ABC.pdf", FileMode.Create))
using (var document = new Document(PageSize.A4, marginLeft, marginRight, marginTop, marginBottom))
using (var pdfWriter = PdfWriter.GetInstance(document, fileStream))
{
   // code
}
Run Code Online (Sandbox Code Playgroud)


thu*_*eys 5

避免缩进的更简单一些的方法:

  using (var fileStream = new FileStream("ABC.pdf", FileMode.Create))
  using (var document = new Document(PageSize.A4, marginLeft, marginRight, marginTop, marginBottom))
  using (var pdfWriter = PdfWriter.GetInstance(document, fileStream))
  {
       document.AddAuthor(metaInformation["author"]);
       document.AddCreator(metaInformation["creator"]);
       document.AddKeywords("Report Generation using I Text");
       document.AddSubject("Document subject - Describing the steps creating a PDF document");
       document.AddTitle("The document title - PDF creation using iTextSharp");
   }
Run Code Online (Sandbox Code Playgroud)

正如乔恩·斯凯特(Jon Skeet)所指出的,这些变量不必是实例变量,因为它们using无论如何都放置在这些块之后。

您可以改用上面的代码中所示的局部变量。