错失“using”机会¶
ID: cs/missed-using-statement
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- maintainability
- language-features
Query suites:
- csharp-security-and-quality.qls
良好的做法是(并且通常对于正确性至关重要)在程序不再需要资源(例如文件句柄、图形句柄或数据库连接)时释放它们。对于仅在单个方法中使用的资源,常见的习惯用法是将使用该资源的代码括在 try
块中,并在 try
的 finally
块中释放该资源。这种习惯用法实际上非常普遍,以至于 C# 以 using
语句的形式为其提供了一种更短、更简洁的语法。
建议¶
鉴于在这种情况下提供了显式语言支持,因此更习惯于使用 using
语句,而不是 try
-finally
技术;它还有助于向其他程序员清楚地传达代码的意图。
示例¶
在此示例中,使用 try
块来确保即使程序引发异常也能释放资源。
class MissedUsingOpportunity
{
static void Main(string[] args)
{
StreamReader reader = null;
try
{
reader = File.OpenText("input.txt");
// ...
}
finally
{
if (reader != null)
{
((IDisposable)reader).Dispose();
}
}
}
}
可以通过使用 using
块来大大简化该示例。
class MissedUsingOpportunityFix
{
static void Main(string[] args)
{
using (StreamReader reader = File.OpenText("input.txt"))
{
// ...
}
}
}
参考¶
MSDN:using 语句。
J. Albahari 和 B. Albahari,《C# 4.0 简明教程 - 权威参考》,第 138 页。