我有一个函数(见下面的代码片段)。
我启用了代码分析,但发现违反了 CA2202 规则。
(编辑:我在 pdfStamper 上添加了关闭,否则 PDF 将被损坏)
CA2202:不要多次处理对象
方法实现包含可能导致对同一对象的 IDisposable.Dispose 或 Dispose 等效项(例如某些类型的 Close() 方法)的多次调用的代码路径。
在 CA2202 MSDN 页面(此处)中,建议的修复不起作用。
如何在不必抑制这种违规的情况下重写代码?
private byte[] DoGenerateFinishedGamePdf(int gameSessionLogId)
{
var finishedGameCertificatePdfFile = httpServerUtilityWrapper.MapPath(ConfigurationManager.AppSettings["FinishedGameCertificateFile"]);
var pdfReader = new PdfReader(finishedGameCertificatePdfFile); // note that PdfReader is not IDisposeable
using (MemoryStream memoryStream = new MemoryStream())
using (PdfStamper pdfStamper = new PdfStamper(pdfReader, memoryStream))
{
var fields = pdfStamper.AcroFields;
fields.SetField("CityName", "It works!");
pdfReader.Close();
pdfStamper.FormFlattening = true;
pdfStamper.FreeTextFlattening = true;
pdfStamper.Close();
return memoryStream.ToArray();
}
}