0

코드는이 경고를 생성하며, 그것은 좋은 방법이 아니다.NullReferenceException 대신 예외가 발생합니까? 나는 NullReferenceException이 던져 경우 C#을</p> <pre><code>void method(int a) { int b = get(a); if (b == 0) { throw new NullReferenceException(); } } </code></pre> <p>의

그럼 NullReferenceException 대신 예외가 있다면? ArgumentNullException이 발견되었지만 b가 인수가 아니기 때문에이 코드에는 적절하지 않습니다.

+1

예외 선택은 주로 개인적인 취향입니다. 따라서 이것이 적합하지 않을 수 있습니다. –

+0

@AlexeiLevenkov ArgumentNullException을 사용할 경우 매개 변수는 "a"여야하며, 그렇지 않으면 다른 경고가 표시되지만 레코드 b가 null이됩니다. –

+0

왜 예외를 생성 하시겠습니까? 'bool method (int a)'를 사용하고'return true' 또는'return false'를 사용합니다 그렇지 않으면이 기사를 볼 수 있습니다 : https://msdn.microsoft.com/en-us/library/87cdya3t(v = vs.110) .aspx – Essigwurst

답변

2

@AlexeiLevenkov는 자신의 의견에서 예외 유형 선택은 개인적인 선택에 달려 있다고 말했습니다. 그러나 준수해야 할 몇 가지 지침이 있습니다. 예를 들어, 코드에서 NullReferenceException을 던지지 않은 것처럼 보셨습니다.

MSDN은 예상대로 좋은 가이드 라인을 제공합니다.

실제 질문에 대해서는 맞춤 예외가 적합하지 않은 경우 InvalidOperationException을 사용하는 것이 좋습니다. YMMV.

1

이 경우 함수 get (a)가 결정적이라면 ArgumentException을 던져서 a의 허용 범위가 무엇인지 말합니다.

즉, 새로운 ArgumentException을 던집니다 ("Parmeter a must be ....", "a");

함수 get (a)이 비 결정적 (수용 할 수있는 범위를 말할 수 없다) 인 경우 이유에 대해 설명하는 메시지가있는 ApplicationException (즉, "서버가 현재 사용 중이므로 작업을 수행 할 수 없음")입니다.