2012-12-13 4 views
2

개체는 데이터베이스에 있습니다. PrDT는개체 null 인 경우 빈 문자열 반환

vi.PrDT = i.PrDateTime.Value.ToString("s"); 

빠른 방법은 무엇입니까 널 (NULL), PrDateTime이 DataTimeOffset 타입, 문자열인가? 다른 등의 경우 내가 원하지 않는 ...

답변

9

사용 conditional operator :

vi.PrDT = i.PrDateTime.HasValue ? i.PrDateTime.Value.ToString("s") : 
            string.Empty; 
+0

if..else에 대한 의미 론적 설탕은 무엇입니까? –

+0

@MichaelPaulukonis - 예. 그러나 그것은'if/else'가 아닙니다 ... – Oded

+0

@MichaelPaulukonis - 꽤 많이. – KeithS

-1
return i.PrDateTime.Value.ToString("s") ?? string.Empty; 
+4

i.PrDateTime이 null 인 경우 실패합니다 ... – Maarten

+0

이 분명하면 'i .PrDateTime.Value'는 'i.PrDataTime'이 아니라 null입니다.하지만이 구문을 이해하지 못합니다 ... 어떻게 ToString ("s")이 null을 반환 할 수 있습니까? –

5

당신은 확장 방법을 수행 할 수 있습니다 다음

public static class NullableToStringExtensions 
{ 
    public static string ToString<T>(this T? value, string format, string coalesce = null) 
     where T : struct, IFormattable 
    { 
     if (value == null) 
     { 
      return coalesce; 
     } 
     else 
     { 
      return value.Value.ToString(format, null); 
     } 
    } 
} 

과 :

vi.PrDT = i.PrDateTime.ToString("s", string.Empty); 
+0

거기에 if..else가 있습니다. ,하지만이 방법은 재사용이 가능한 가장 빠른 방법 인 것 같습니다. –

2
string.Format("{0:s}", i.PrDateTime) 

위의 경우 null 인 경우 빈 문자열이 반환됩니다. Nullable<T>.ToString은 null 값을 검사하고 빈 문자열이 있으면 반환하고, 그렇지 않으면 문자열 표현을 반환하지만 서식 지정자는 사용할 수 없습니다. 트릭은 string.Format을 사용하여 원하는 형식 지정자 (이 경우 s)를 사용할 수 있으며 여전히 Nullable<T>.ToString 동작을 얻을 수 있습니다.

1
return (i.PrDateTime.Value ?? string.Empty).ToString(); 

테스트를 거쳤으므로 제대로 작동하는 것 같습니다.

관련 문제