我正在审查一些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();
}
现在,我已经对此进行了一些研究,并且通过我失败的记忆回顾了几年,我认为有很多方法可以做得更好。我想知道哪种方式更“标准”/“最佳”。我认为下面的第1号是最好的方法。
提前感谢。
将DataSet添加到using语句中,以便在using语句范围的末尾自动处理它,从而无需clear和dispose。我会这样做:
using(StreamWriter thing = new StreamWriter(), DataSet DS = new DataSet()) {
DS = SQLQueryMethod()
do stuff to DS{...}
}
只需在DataSet DS上调用dispose,因为我认为在处置之前清除它是没用的。
实际上有必要以原始方式进行。
答案 0 :(得分:6)
多个“using statement”可以使用如下:
using (StreamWriter thing = new StreamWriter())
using (DataSet DS = new DataSet())
{
DS = SQLQueryMethod();
//do stuff ....
}
因为StreamWriter和DataSet在IDisposable接口中实现了所需的Dispose()方法,所以之后不需要显式调用它
答案 1 :(得分:0)
正确的方法是配置实现IDisposable的所有东西 - 比如
using (var thing = new StreamWriter())
using (var ds = SQLQueryMethod())
{
do stuff to DS {}
}
其他建议的答案是错误的
using(StreamWriter thing = new StreamWriter())
using(DataSet DS = new DataSet())
{
// this won't compile - DS is in using so it is a read-only variable
DS = SQLQueryMethod()
do stuff to DS{...}
}
参考:Why is a variable declared in a using statement treated as readonly?