我有一个功能(见下面的代码片段)。
我启用了代码分析,但是我收到了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();
}
}