2012-02-04 6 views
3

일부 공용 속성이있는 사용자 정의 컨트롤이 있습니다. 특정 속성은 정수이지만 const 최대 값보다 작은 양수 값만 받아 들여야합니다. 현재 다음을 수행합니다.속성에서 허용하는 값의 범위를 제한하는 올바른 방법은 무엇입니까?

private int markerwidth = 2; 
[DefaultValue(2), Category("Appearance"), Description("Size of position marker")] 
public int MarkerWidth 
{ 
    get 
    { 
     return this.markerwidth; 
    } 
    set 
    { 
     if (value > 0 && value <= MAXMARKERWIDTH) 
     { 
      this.markerwidth = value; 
     } 
    } 
} 

이 작업은 수행하지만 조용히 실패합니다. 0을 음수 값으로 사용하고 논리 값을 초과하는 값을 최대로 사용하는 로직을 추가 할 수는 있지만 여전히 이상적은 아닙니다.

대조적으로 디자인 타임에 (그리고 아마도 런타임에) 음수 값을 설정하려고하면 TabValue 속성 (UserControl에서 상속)이 발생합니다.

정상적인 예외는 있습니까? 아니면 더 좋은 방법이 있습니까? 아마도 속성일까요?

답변

6

가장 좋은 방법은 예외를 통해 달성하는 것입니다. 그냥

if (value > 0 && value <= MAXMARKERWIDTH) 
    { 
     this.markerwidth = value; 
    } 
    else 
    { 
     throw new ArgumentOutOfRangeException("Invalid value. Value must be between 0 and " + MAXMARKERWIDTH.ToString()); 
    } 

편집

예 코드 계속 Wiktor Zychla은 절대적으로 옳다! 나는 그 답을 바로 잡았다.

+0

감사합니다. 나는 이것이 더 완전한 대답이기 때문에 이것을 받아 들였다. –

2

여기에는 ArgumentOutOfRangeException이 내장되어 있습니다. 맞을 것 같습니다.

관련 문제