2014-09-24 2 views
3

다음 코드가 있습니다.ArgumentOutOfRangeException을 여러 매개 변수와 함께 사용하는 방법?

DoSomething(int min, int max) 
{ 
    if (min < 1 || min > 5) 
     throw new ArgumentOutOfRangeException("min"); 
    if (max < 1 || max > 5) 
     throw new ArgumentOutOfRangeException("max"); 
    if (min > max) 
     throw new ArgumentOutOfRangeException("min & max"); 

    DoSomethingWithYourLife(); // =) 
} 

설명서에 나는 min과 max가 [1-5] 범위에 있어야하며 max는 min 이상이어야한다고 설명합니다.

세 번째 예외가 올바르게 생성 되었습니까? 그렇지 않은 경우 어떻게 예외를 구성해야합니까?

답변

3

아니, ArgumentOutOfRangeException 생성자의 인수는 항상해야 하나 이름. 둘 중 하나를 선택할 수 있습니다. 보통 이전의 매개 변수가 올바른 것으로 가정하므로 나중에 매개 변수와 관련하여 올바르지 않습니다. 메시지에서 더 많은 정보를 제공 할 수 있습니다.

internal static void CheckArgumentRange(string paramName, 
    int value, int minInclusive, int maxInclusive) 
{ 
    if (value < minInclusive || value > maxInclusive) 
    { 
     throw new ArgumentOutOfRangeException(paramName, value, 
      "Value should be in range [" + minInclusive + "-" + maxInclusive + "]"); 
    } 
} 

당신이 위를 단순화 수있는 방법 : Noda Time를 들어

if (min < 1 || min > 5) 
{ 
    throw new ArgumentOutOfRangeException("min", min, "min must be between 1 and 5 inclusive"); 
} 
if (max < 1 || max > 5) 
{ 
    throw new ArgumentOutOfRangeException("max", max, "max must be between 1 and 5 inclusive"); 
} 
if (max < min) 
{ 
    throw new ArgumentOutOfRangeException("max", max, "max must not not be less than min"); 
} 

나는 등이 헬퍼 방법을 가지고, 그래서 - 당신이 실제 값을 주면 정말 또한 편리한 입니다 :

Preconditions.CheckArgumentRange("min", min, 1, 5); 
Preconditions.CheckArgumentRange("max", max, 1, 5); 
if (max < min) 
{ 
    throw new ArgumentOutOfRangeException("max", max, "max must not not be less than min"); 
} 
0
난 강력 단지 그들 중 하나를 따기,하지만 생성자의 this overload으로 더 많은 정보를 오류 메시지를 제공하는 것이 좋습니다 것

: 매개 변수의

if (min > max) 
    throw new ArgumentOutOfRangeException("max", "max must be greater than or equal to min"); 
관련 문제