[c#] Visual Studio에서 “[일부 이벤트] 사용하지 않음”컴파일러 경고를 제거하려면 어떻게합니까?

예를 들어이 컴파일러 경고가 표시됩니다.

‘Company.SomeControl.SearchClick’이벤트는 사용되지 않습니다.

그러나 주석을 달면이 이벤트를 사용하려는 XAML 페이지에 대한 20 개의 새로운 경고가 발생하기 때문에 사용된다는 것을 알고 있습니다!

무엇을 제공합니까? 이 경고를 제거하는 트릭이 있습니까?



답변

이것은 경고 67로 보이 므로 다음을 사용하여 억제 할 수 있습니다.

#pragma warning disable 67

다음을 사용하여 가능한 한 빨리 (이벤트 선언 후) 복원하는 것을 잊지 마십시오.

#pragma warning restore 67

그러나 다시 확인 하고 이벤트를 구독 하는 것이 아니라 어딘가에서 이벤트를 제기 하고 있는지 확인 합니다. 컴파일러 가 이벤트를 주석 처리 할 때 20 개의 오류 가 아니라 20 개의 경고를 내 보낸다는 사실 도 의심 스럽습니다.

이 경고와 특히 인터페이스에 적용되는 방법에 대한 흥미로운 기사 도 있습니다. “사용하지 않는”이벤트를 처리하는 방법에 대한 좋은 제안이 있습니다. 중요한 부분은 다음과 같습니다.

정답은 이벤트에서 기대하는 바를 명시하는 것입니다.이 경우에는 아무것도 아닙니다.

public event EventHandler Unimportant
{
    add { }
    remove { }
}

이렇게하면 경고는 물론 일반 이벤트의 추가 컴파일러 생성 구현이 표시되지 않습니다. 그리고 또 다른 추가적인 이점으로, 이것은 아무것도하지 않는 구현이 실제로 최상의 구현인지에 대해 생각하게합니다. 예를 들어 이벤트가 지원되지 않기 때문에 그다지 중요하지 않아서 기능에 의존하는 클라이언트가 이벤트없이 실패 할 가능성이있는 경우 지원 부족을 명시 적으로 표시하고 빠르게 실패 할 수 있습니다. 예외:

public event EventHandler Unsupported
{
    add { throw new NotSupportedException(); }
    remove { }
}

물론 기능의 일부없이 유용하게 구현할 수있는 인터페이스는 인터페이스가 최적으로 응집되지 않고 별도의 인터페이스로 분할되어야 함을 나타내는 경우가 있습니다.


답변

인터페이스에서 이벤트를 구현해야하는 경우 구현에 필요하지 않은 경우 경고를 피하기 위해 다음을 수행 할 수 있습니다.

public event EventHandler CanExecuteChanged { add{} remove{} }


답변

두 번째로 좋은 방법은 누군가가 구독을 시도하면 예외를 발생시켜 이벤트가 지원되지 않음을 명확하게 알리는 imho입니다.

public event RoutedEventHandler SearchClick
{
    add { throw new NotSupportedException(); }
    remove { throw new NotSupportedException(); }
}

이에 대한 변형으로 addremove메서드를 비워 두어 이벤트에 대한 구독을 자동으로 무시할 수도 있습니다.

가장 좋은 해결책은 코드를 리팩토링하는 것입니다. 가능하면 이벤트 선언을 구현 자에게 가져 오는 것입니다.

최후의 수단으로 다음과 같이 경고를 비활성화 할 수도 있습니다.

#pragma warning disable 67
public event RoutedEventHandler SearchClick;
#pragma warning restore 67


답변

다음을 수행 할 수도 있습니다.

public event EventHandler MyEvent = delegate {}


답변

컴파일러는 XAML 코드에서 사용되고 있음을 분명히 인식하지 못합니다. 이벤트 정의에서 경고를 억제하십시오.

또한 실제로 어딘가에서 이벤트를 제기하고 있는지 확인하십시오.


답변

개별 경고를 억제 할 수 있습니다.

\Program.cs(13,20): warning CS0219: The variable 'foo' is assigned but its value is never used

이 경우 CS0219는 할당되었지만 사용되지 않는 변수에 대한 경고입니다. / nowarn : 0219 플래그를 사용하거나 프로젝트의 속성 창에 오류 번호를 추가 할 수 있습니다 ( “Build”아래에서 선행 CS를 제거해야 함). 이 클래스의 모든 경고를 억제 합니다 .


답변

또는 <NoWarn>67</NoWarn>프로젝트에 추가 할 수 있습니다.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <NoWarn>67</NoWarn>
</PropertyGroup>