以下を有する:
StringWriter sw = null;
try
{
sw = new StringWriter();
using (var xw = new XmlTextWriter(sw))
{
doc.WriteTo(xw);
return sw.ToString();
}
}
finally
{
sw?.Dispose();
}
Visual Studio 2015 でCA2202 (オブジェクトを複数回破棄しないでください) 警告をトリガーします。
fianlly
ただし、ブロックを次のように変更すると、警告はトリガーされません。
finally
{
if (sw != null)
{
sw.Dispose();
}
}
finally
ブロックか何かの null 条件演算子の奇妙な点ですか、それとも Visual Studio の分析ツールが単にそれを理解していないのでしょうか?
編集: おそらく関連: Dispose() で null 条件演算子を使用すると、コード分析によってフラグが立てられるのはなぜですか?