2009-09-18 7 views
30

मैं एक DateTime? चर कभी कभी मूल्य null है,, मैं कैसे एक खाली स्ट्रिंग "" लौट सकते हैं जब मूल्य null या DateTime मूल्य जब null नहीं है करने के लिए ? सी # Nullable स्ट्रिंग

उत्तर

32
string date = myVariable.HasValue ? myVariable.Value.ToString() : string.Empty;
+0

धन्यवाद, मैं –

+11

क्या वास्तव में क्या देख रहा था !? आप String.Empty प्राप्त करने के लिए Nullable इंस्टेंस पर केवल ToString() को कॉल कर सकते हैं। यहां तक ​​कि एरिक लिपर्ट (जो इस व्यवहार को भी लागू कर सकता है) यह नोट करता है। _That_ स्वीकृत उत्तर होना चाहिए। – codekaizen

+1

@codekaizen - जब मैं कोशिश करता हूं तो मुझे अपवाद मिलता है। तो नहीं, यह स्वीकार्य उत्तर नहीं होगा। शायद यह C# या .net के हाल के संस्करणों में कोई समस्या नहीं है? –

1
DateTime? MyNullableDT; 
.... 
if (MyNullableDT.HasValue) 
{ 
    return MyNullableDT.Value.ToString(); 
} 
return ""; 
2
DateTime? d; 
// stuff manipulating d; 
return d != null ? d.Value.ToString() : String.Empty; 
1
if (aDate.HasValue) 
    return aDate; 
else 
    return string.Empty; 
1
DateTime d?; 
string s = d.HasValue ? d.ToString() : string.Empty; 
7

आप एक विस्तार विधि

public static string ToStringSafe(this DateTime? t) { 
    return t.HasValue ? t.Value.ToString() : String.Empty; 
} 

... 
var str = myVariable.ToStringSafe(); 
+4

या बेहतर अभी तक: यह सामान्य बनाने: 'सार्वजनिक स्थैतिक स्ट्रिंग ToSafeString जहां टी (इस टी obj?): Struct' :) – JulianR

+0

पवित्र सिगरेट, .NET यह क्षमता थी नहीं पता था! – tster

16

असल में लिख सकता है, इस Nullable प्रकार के लिए डिफ़ॉल्ट व्यवहार है, कि एक मूल्य के बिना वे कुछ भी नहीं लौट :

public class Test { 
    public static void Main() { 
     System.DateTime? dt = null; 
     System.Console.WriteLine("<{0}>", dt.ToString()); 
     dt = System.DateTime.Now; 
     System.Console.WriteLine("<{0}>", dt.ToString()); 
    } 
} 

इस पैदावार

<> 
<2009-09-18 19:16:09> 
+3

+1 यह नहीं पता था। हालांकि, आप इस तरह एक स्वरूपण स्ट्रिंग की आपूर्ति नहीं कर सकते हैं। –

+0

एचएम, दाएं। हालांकि इस इस मामले में एक समस्या नहीं हो सकता है। मैं नहीं इस अपने आप को भी कल तक हालांकि पता नहीं था,। इस पर ठोकर खाई जब 'Nullable ' परावर्तक :-) – Joey

87

हालांकि इन सवालों के जवाब के कई सही हैं, उन सभी को बेकार में जटिल हैं। कॉल को टर्निंग करने का नतीजा डेटटाइम पर पहले से ही खाली स्ट्रिंग है यदि मान तार्किक रूप से शून्य है। बस अपने मूल्य पर ToString को कॉल करें; यह वही करेगा जो आप चाहते हैं।

+3

में पर देख रहे हैं जब तक आप 'तरह .Day'' .Week' दिनांक समय गुण उपयोग करें, क्योंकि यह है कि आप पूरे दिनांक समय स्ट्रिंग दे देंगे और दिनांक समय वर्ग की शक्ति कम करना चाहते । जैसे 'MyVariable.Value.Hour।ToString() '। सिर्फ एक उदाहरण कारण है कि आप अन्यथा क्यों करना चाहते हैं। – baron

+2

@baron, वे गुण 'Nullable' नहीं हैं। – Sam

4

एक Nullable<T> कि है null कोई रिक्त स्ट्रिंग वापस आ जाएगी पर .ToString() कॉलिंग।

0

आपको बस इतना करना है कि बस .ToString() पर कॉल करें। यह ऑब्जेक्ट null मान के लिए संभालता है।

यहाँ Nullable<T>.ToString() के लिए source of .NET Framework है:

public override string ToString() { 
    return hasValue ? value.ToString() : ""; 
} 
संबंधित मुद्दे