C#使用明确配置

Ter*_*y H 2 c# dispose using clear

我正在审查一些C#代码,因为我使用过C#已经有一段时间了,所以我想确保我的直觉是正确的.在这段代码中,我看到了一个使用块内的许多地方,其中包括以下内容:

using(StreamWriter thing = new StreamWriter()) {

    DataSet DS = SQLQueryMethod();
    do stuff to DS and log that stuff to the a log file using thingy...

    DS.clear();
    DS.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

现在,我已经对此做了一些研究,并且通过我失败的记忆回顾了几年,我认为有很多方法可以做得更好.我想知道哪种方式更"标准"/"最佳".我认为下面的第1号是最好的方法.

提前致谢.

  1. 将DataSet添加到using语句中,以便在using语句范围的末尾自动处理它,从而无需clear和dispose.我会这样做:

    using(StreamWriter thing = new StreamWriter(), DataSet DS = new DataSet()) {
    
        DS = SQLQueryMethod()
        do stuff to DS{...}
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 只需在DataSet DS上调用dispose,因为我认为在处理之前清除它是没用的.

  3. 实际上有必要以原始方式进行.

Kev*_*nle 6

多个"使用声明"可以使用如下:

using (StreamWriter thing = new StreamWriter())
using (DataSet DS = new DataSet())
{
    DS = SQLQueryMethod();
    //do stuff ....
} 
Run Code Online (Sandbox Code Playgroud)

因为StreamWriter和DataSet在IDisposable接口中实现了所需的Dispose()方法,所以之后不需要显式调用它

  • 如果要保存一行,甚至可以使用`(DataSet DS = SQLQueryMethod())` (4认同)
  • 为什么每个人都在答案中声明一个"新的DataSet()"?`using`语句不保留原始引用吗? (2认同)
  • @flkes - 我也不明白 - 这不会编译:) (2认同)