일회용품에 대한 CA2202 경고 억제
코드 분석 도구 CA2202는 객체가 여러 번 삭제되어 ObjectDisposedException
오류가 발생할 수 있는 문제를 표시합니다. 이 경고는 일반적으로 다음 코드와 같이 중첩된 일회용 객체를 사용할 때 발생합니다.
<code class="language-csharp">public static byte[] Encrypt(string data, byte[] key, byte[] iv) { using (MemoryStream memoryStream = new MemoryStream()) { using (DESCryptoServiceProvider cryptograph = new DESCryptoServiceProvider()) { using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write)) { using (StreamWriter streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(data); } } } return memoryStream.ToArray(); } }</code>
이 경우 CA2202는 memoryStream
및 cryptoStream
이 여러 번 처리됨을 경고합니다. 이러한 경고를 해결하려면 제공된 솔루션에 표시된 대로 선택적으로 경고를 억제할 수 있습니다.
<code class="language-csharp">[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")] public static byte[] Encrypt(string data, byte[] key, byte[] iv) { using (var memoryStream = new MemoryStream()) { using (var cryptograph = new DESCryptoServiceProvider()) using (var cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write)) using (var streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(data); } return memoryStream.ToArray(); } }</code>
억제는 특정 코드의 맥락에서 경고가 중요하지 않거나 잘못된 것으로 간주되는지 확인하는 방법을 제공합니다. 그러나 코드에는 여전히 기술적으로 여러 삭제가 포함되어 있으므로 삭제 가능한 객체의 구현이 실패할 경우 문제가 발생할 수 있다는 점에 유의하는 것이 중요합니다.
억제 외에도 또 다른 접근 방식은 추가 삭제를 제거하고 각 객체가 한 번만 삭제되도록 코드를 리팩터링하는 것입니다.
<code class="language-csharp">public static byte[] Encrypt(string data, byte[] key, byte[] iv) { using (var memoryStream = new MemoryStream()) using (var cryptograph = new DESCryptoServiceProvider()) using (var cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write)) { using (var streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(data); } } return memoryStream.ToArray(); }</code>
이렇게 하면 예상되는 동작이 저하되거나 잠재적인 예외가 발생하지 않고 경고가 제거됩니다. 그러나 선호되는 접근 방식은 궁극적으로 코드 베이스의 특정 요구 사항과 컨텍스트에 따라 달라집니다.
위 내용은 C#에서 여러 개체를 삭제할 때 CA2202 경고를 효과적으로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!