> 백엔드 개발 > C++ > C#에서 여러 개체를 삭제할 때 CA2202 경고를 효과적으로 처리하는 방법은 무엇입니까?

C#에서 여러 개체를 삭제할 때 CA2202 경고를 효과적으로 처리하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-23 11:11:09
원래의
219명이 탐색했습니다.

How to Effectively Handle CA2202 Warnings When Disposing of Multiple Objects in C#?

일회용품에 대한 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는 memoryStreamcryptoStream이 여러 번 처리됨을 경고합니다. 이러한 경고를 해결하려면 제공된 솔루션에 표시된 대로 선택적으로 경고를 억제할 수 있습니다.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿