2009-08-07 4 views
5

이 C# 코드를 C# 3.0에 작성하는 더 좋은 방법이 있습니까?

다음과 같이 선언 된 속성이 있습니다 :

public decimal? MyProperty { get; set; } 

문자열로 다른 메서드에이 값을 전달해야하므로 이렇게하려면 볼 수있는 유일한 방법은 다음과 같습니다 :

MyProperty == null ? null : MyProperty.ToString() 

메서드에 전달되는 유사한 속성이 여러 개있을 때 매우 혼란스러워 보입니다.

누구든지 이것을 작성하는 더 낫고 더 간결한 방법이 있다면 알 수 있습니까?

오, 누구든지이 질문에 더 적절한 제목을 생각하면 자유롭게 바꿔주세요 ...

답변

15

당신이 할 수있는 당신이 t를 얻을 필요가 속성을 포함하는 클래스의 속성을 얻을 Nullable<T>.ToString()override ...

var s = MyProperty.ToString(); // returns "" if MyProperty is null 
+0

와우, 정말요? 새로운 것을 배웠습니다. 나는 그것을 결코 시도하지 않았을 것이다. null 포인터 예외를 던질 것이라고 생각한다. – Paul

+0

와우! .ToString null null nullable 값을 위해 여전히 일했다. 멋지다! – mezoid

+0

...하지만 값이 NULL이면 작성자가 NULL을 원했던 것처럼 들립니다. ?? –

1

대신 비교의 HasValue을 사용할 수

MyProperty.HasValue ? MyProperty.Value.ToString() : null; 
1

만들기 문자열을 사용하며 혹 지저분하지 않습니다 그는 문자열 버전입니다.

public decimal? MyProperty { get; set; } 

    public string MyPropertyString 
    { 
     get 
     { 
      return MyProperty.HasValue ? MyProperty.Value.ToString() : null; 
     } 
    } 
1

Decimal에 확장 메서드를 선언 할 수 있습니다.

public static string Str(this decimal? value) 
{ 
    return value == null ? null : MyProperty.ToString() 
} 

당신은 다음과 같이 호출 :

MyProperty.Str() 
+0

아니요 10 진수이어야 함 **? ** (Null 가능) –

1

를 그 다음 널 (null)의 제로 istead 가지고 확인하는 경우 :

public static string AsString(this decimal? val) 
{ 
    return val == null ? null : val.Value.ToString(); 
} 

// Use: 
MyProperty.AsString() // This will NEVER cause NullReferenceException 
:

(MyProperty ?? 0).ToString() 

그렇지 않으면 확장 메서드를 추가하십시오