Share via


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

속성
규칙 ID CA1806
타이틀 메서드 결과를 무시하지 마세요.
범주 성능
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

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

  • 새 개체가 만들어졌지만 사용되지 않았습니다.

  • 새 문자열을 만들고 반환하는 메서드가 호출되었으며 새 문자열이 사용되지 않았습니다.

  • 사용되지 않는 오류 코드를 반환 HRESULT 하는 COM 또는 P/Invoke 메서드입니다.

  • 사용되지 않는 결과를 반환하는 LINQ(언어 통합 쿼리) 메서드입니다.

규칙 설명

불필요한 개체를 만들고 사용되지 않는 개체의 연결된 가비지 수집을 사용하면 성능이 저하됩니다.

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

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

LINQ 메서드는 부작용이 없는 것으로 알려져 있으며 결과는 무시하면 안 됩니다.

위반 문제를 해결하는 방법

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

또는

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

또는

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

또는

LINQ 메서드 A가 메서드 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
{
    private readonly string? _Title;

    public Book(string title)
    {
        if (title != null)
        {
            // Violates this rule
            title.Trim();
        }

        _Title = title;
    }

    public string? Title
    {
        get { return _Title; }
    }
}
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

예제 2

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

public class Book
{
    private readonly string? _Title;

    public Book(string title)
    {
        if (title != null)
        {
            title = title.Trim();
        }

        _Title = title;
    }

    public string? Title
    {
        get { return _Title; }
    }
}
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

예 3

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

참고 항목

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

public class Book
{
    public Book()
    {
    }

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

예시 4

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

public class Book
{
    public Book()
    {
    }

    public static Book CreateBook()
    {
        return new Book();
    }
}