2012-07-10 2 views
1

"param"이라는 private 문자열 변수가있는 "config"라는 클래스가 있습니다.하나의 변수를 포함하는 클래스에서 다중 속성을 사용하는 방법은 무엇입니까?

때로는 "config"클래스 "param"변수에서 때때로 bool 유형 또는 문자열로 int 유형으로 가져와야합니다. 내가 설정 클래스의 3 개 속성을 만들 필요가 알고있는 것처럼

는, 각 속성은 다음과 같은 형식을 변환 할 수 있습니다

첫 번째 속성은 문자열을 int로 변환, 두 번째는 bool로하는 문자열로 변환, 세 번째 속성은 저를 얻는다 캐릭터 라인 치

클래스는 다음과 같이 보일 것이다 :

class Config 
{ 
    private string param; 

    public int ParamAsInt 
    { 
    get 
    { 
     return int.Parse(param); 
    } 
    } 

    public bool ParamAsBool 
    { 
    get 
    { 
     return bool.Parse(param); 
    } 
    } 

    public string ParamAsString 
    { 
    get 
    { 
     return param; 
    } 
    } 

} 

하지만 이러한 속성 내가 클래스에서 싶어 변수 유형에 따라 사용할 수있는 방법을 모르겠어요.

답변

4

이 코드는 컴파일되지 않으며 - int이며 예약 키워드이므로 식별자로 사용할 수 없습니다. 당신은 등 Int32Value처럼 속성 뭔가, StringValue을 명명 시도하거나 시도 할 수 있습니다이 :

Config c = GetConfig("foo"); 
var isFeatureEnabled = false || c; 
var spacing = 23 + GetConfig("bar"); 
+0

위에서 언급 한 것처럼 그는 C#이 지원하지 않는 하나 이상의 암시 적 변환이 필요합니다. * 사용자 정의 변환의 평가에는 둘 이상의 사용자 정의 또는 해제 변환 연산자가 필요하지 않습니다. *) – V4Vendetta

1

당신은 당신의 재산을 이름을 지정하는 것을 잊었다 :이 훨씬 청소기 코드 수

public static implicit operator bool (Config config) 
{ 
    return bool.Parse(config.param); 
} 

public static implicit operator int (Config config) 
{ 
    return int.Parse(config.param); 
} 

. 어떻게 그들을 참조 할 것으로 예상됩니까? 이런 식으로 뭔가 : 나는 또한 .Parse()로 통화에 케이스를 고정

class Config 
{ 
    private string param; 

    public int ParamAsInt 
    { 
     get 
     { 
      return int.Parse(param); 
     } 
    } 

    public bool ParamAsBool 
    { 
     get 
     { 
      return bool.Parse(param); 
     } 
    } 

    public string ParamAsString 
    { 
     get 
     { 
      return param; 
     } 
    } 
} 

참고. C#은 대소 문자를 구분합니다. 나는 bool.TryParse()의 전화를 bool.Parse()으로 바 꾸었습니다. 전자가 제대로 사용되면 매개 변수가 누락되어서는 아니므로 이고 bool 인 경우에만 bool의 어떤 값이 실제로 인지 알려주지 않습니다. 예를 들어 bool.TryParse('false' out someBool)true을 반환합니다.

물론이 코드는 약간 위험합니다. 이러한 가치를 확인하기 위해 좀 더 방어적인 프로그래밍부터 시작하는 것이 좋습니다. 기본적으로 TryParse()을 찾아 올바르게 사용하는 방법입니다. 예를 들면 다음과 같습니다.

public int ParamAsInt 
{ 
    get 
    { 
     var tmp = default(int); 
     if (int.TryParse(param, out tmp)) 
      return tmp; 
     else 
      // do something else? throw a specific exception? 
    } 
} 

또한이 코드의 목적은 무엇입니까? 그것은 매우 서두르고 가난한 디자인처럼 보인다. 주어진 값이 param 인 경우 (어쨌든 으로 설정됩니까?)이 유형의 무작위로 형식화 된 속성을 노출하려고 시도합니다. 올바른 것을 추측하면 여전히 예외를 던질 다른 것들이 남아 있습니다. 확실히 깨끗한 방법으로 수행하려는 작업을 수행 할 수 있습니다. 그럼 입니까?

관련 문제