문제

나는 다음과 같이 보이는 두 개의 생성자가있는 수업이 있습니다.

public MyClass(SomeOtherClass source) : this(source, source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }

내가 fxcop을 실행할 때, 그것은 위반을 정확하게보고합니다. CA1062 : validateargumentsofpublicMethods, if source ~이다 null 첫 번째 생성자에서는 a NullReferenceException ~에 source.Name.

이 경고를 고칠 방법이 있습니까?

나는 null을 확인하고 그 주장을 반환하는 확장 방법을 만들 수 있지만 추악 할 것입니다. 또한, 내가 이해했듯이, FXCOP는 그것이 무엇을하는지 알지 못하기 때문에 경고를 해결하지 못할 것입니다.

도움이 되었습니까?

해결책

이와 같이?

public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }

다른 팁

FXCOP 경고를 끄는 합법적 인 시간이 있으며 이것은 하나 일 수 있지만, NULL을 확인하고 예외 (또는 기본값을 대체) 또는 정적으로 호출하는 3 배 표현으로 문제를 해결할 수 있습니다. null을 확인하고 적절한 예외를 던지는 방법.

이 질문이 얼마 전에 묻는 질문이되었으므로 C#의 이후 기능에 주목하고 싶습니다. 이제 다음에도 사용할 수 있습니다.

public MyClass(SomeOtherClass source) : this(source, source?.Name) { }

이 경고를 고치는 유일한 방법은 그것을 끄는 것입니다. FXCOP는 훌륭한 도구이지만 때로는 도구 일 뿐이며 항상 코드에 맞지 않는 제안을 할 수 있다는 것을 기억해야합니다.

이 예에서는 경고를 무시하거나보고 싶지 않은 경우 비활성화한다고 말합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top