다음을 통해 공유


CA1806: 메서드 결과를 무시하지 마십시오.

속성
규칙 ID CA1806
제목 메서드 결과를 무시하지 마세요.
범주 성능
수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 주요 변경 아님
.NET 10에서 기본적으로 사용하도록 설정 제안 사항
적용 가능한 언어 C# 및 Visual Basic

원인

이 경고가 표시되는 원인은 여러 가지가 있습니다.

  • 새 개체가 만들어졌지만 사용되지 않았습니다.
  • 새 문자열을 만들고 반환하는 메서드가 호출되었으며 새 문자열이 사용되지 않았습니다.
  • COM 또는 P/Invoke 메서드는 사용되지 않는 HRESULT 또는 오류 코드를 반환합니다.
  • LINQ(언어 통합 쿼리) 메서드는 사용되지 않는 결과를 반환합니다.
  • [Pure] 메서드가 호출되고 반환 값이 사용되지 않습니다.

규칙 설명

불필요한 객체 생성과 사용되지 않는 객체에 대한 가비지 수집은 성능을 저하시킵니다.

문자열은 변경할 수 없으며 호출 메서드에서 문자열 인스턴스를 수정하는 대신 문자열의 새 인스턴스를 반환하는 등의 String.ToUpper 메서드가 있습니다.

HRESULT 무시하거나 오류 코드를 사용하면 리소스가 부족하거나 오류 조건에서 예기치 않은 동작이 발생할 수 있습니다.

LINQ 메서드와 PureAttribute로 주석이 추가된 메서드는 부작용이 없는 것으로 알려져 있으며, 그 결과는 무시해서는 안 됩니다.

위반 문제를 해결하는 방법

메서드가 사용되지 않는 개체의 새 인스턴스를 만드는 경우 인스턴스를 다른 메서드에 인수로 전달하거나 인스턴스를 변수에 할당합니다. 개체를 만들 필요가 없다면 제거합니다.

또는

메서드 A가 메서드 B를 호출하지만 메서드 B가 반환하는 새 문자열 인스턴스를 사용하지 않는 경우 인스턴스를 다른 메서드에 인수로 전달하거나 인스턴스를 변수에 할당합니다. 또는 불필요한 경우 호출을 제거합니다.

또는

메서드 A가 메서드 B를 호출하지만 메서드가 반환하는 오류 코드를 사용하지 HRESULT 않는 경우 조건문에서 결과를 사용하거나, 결과를 변수에 할당하거나, 다른 메서드에 인수로 전달합니다.

또는

메서드 A가 LINQ 또는 pure 메서드 B를 호출하지만 결과를 사용하지 않는 경우 조건문에서 결과를 사용하거나, 결과를 변수에 할당하거나, 다른 메서드에 인수로 전달합니다.

경고를 표시하지 않는 경우

개체를 만드는 작업이 어떤 목적을 가지고 있는 경우가 아니라면, 이 규칙의 경고를 억제하지 마십시오.

경고 표시 안 함

단일 위반을 억제하려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 비활성화한 후 다시 활성화하십시오.

#pragma warning disable CA1806
// The code that's violating the rule is on this line.
#pragma warning restore CA1806

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않으려면 구성 파일에서 none의 심각도를 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA1806.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

분석할 코드 구성

다음 옵션을 사용하여 이 규칙이 실행될 코드베이스 부분을 구성합니다.

적용할 추가 메서드

추가 사용자 지정 API의 결과가 사용되는지 확인하도록 이 규칙을 구성할 수 있습니다. 하나 이상의 메서드를 옵션 값 으로 지정합니다 additional_use_results_methods . 여러 메서드 이름을 지정하려면 .으로 |구분합니다. 메서드 이름에 허용되는 형식은 다음과 같습니다.

  • 메서드 이름만(포함된 형식 또는 네임스페이스에 관계없이 해당 이름의 모든 메서드를 포함합니다).
  • 설명서 ID 형식의 완전한 자격 이름, 선택적으로 M: 접두사를 사용할 수 있습니다.

예를 들어, CA1806 규칙이 MyMethod1이라는 이름의 메서드에서 반환된 결과가 사용되는지도 확인하도록 하려면, 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CA1806.additional_use_results_methods = MyMethod1

또는 정규화된 이름을 사용하여 해당 이름을 가진 특정 메서드만 포함되는지를 명확히 하거나 확인합니다.

dotnet_code_quality.CA1806.additional_use_results_methods = M:MyNamespace.MyType.MyMethod1(ParamType)

예 1

다음 예제에서는 호출 String.Trim결과를 무시하는 클래스를 보여 줍니다.

public class Book
{
    public Book(string title)
    {
        // Violates this rule.
        title?.Trim();

        Title = title;
    }

    public string? Title { get; }
}
Public Class Book
    Public Sub New(ByVal title As String)

        If title IsNot Nothing Then
            ' Violates this rule                
            title.Trim()
        End If

        Me.Title = title

    End Sub

    Public ReadOnly Property Title() As String

End Class

다음 예제에서는 호출된 변수에 다시 결과를 String.Trim 할당하여 위반을 해결합니다.

public class Book
{
    public Book(string title)
    {
        // Fixes the violation.
        Title = title?.Trim();
    }

    public string? Title { get; }
}
Public Class Book
    Public Sub New(ByVal title As String)

        If title IsNot Nothing Then
            title = title.Trim()
        End If

        Me.Title = title

    End Sub

    Public ReadOnly Property Title() As String

End Class

예제 2

다음 예제에서는 만드는 개체를 사용 하지 않는 메서드를 보여 집니다.

주의

이 위반은 Visual Basic에서 재현할 수 없습니다.

public class Book
{
    public Book() { }

    public static Book CreateBook()
    {
        // Violates this rule.
        new Book();
        return new Book();
    }
}

다음 예제에서는 개체의 불필요한 생성을 제거하여 위반을 해결합니다.

public class Book
{
    public Book() { }

    public static Book CreateBook()
    {
        // Fixes the violation.
        return new Book();
    }
}