मैं एक सामान्य कनवर्टरसामान्य विधि
यहाँ बनाने हूँ में नल के लिए परिवर्तन नहीं कर सकते जेनेरिक कनवर्टर
bool TryReaderParse<TType>(object data, out TType value)
{
value = default(TType);
Type returnType = typeof(TType);
object tmpValue = null;
if (returnType == typeof(DateTime))
{
tmpValue = StringToDatetime(data.ToString());
}
else if (returnType == typeof(DateTime?)) // THIS IF FIRES
{
tmpValue = StringToNullableDatetime(data.ToString());
}
value = (TType)Convert.ChangeType(tmpValue, returnType); // THROWS
}
public DateTime? StringToNullableDatetime(string date)
{
DateTime? datetime = null;
if (!string.IsNullOrEmpty(date))
{
datetime = DateTime.Parse(date, new CultureInfo(Resources.CurrentCulture));
}
return datetime;
}
का एक नमूना कोड है और यह है मैं इसे कैसे उपयोग करें:
void foo()
{
DateTime? date = null;
TryReaderParse<DateTime?>("25/12/2012", out date);
}
फेंक दिया अपवाद कहता है कि यह DateTime
से Nullable<DateTime>
में परिवर्तित नहीं हो सकता है। चूंकि, विधि एक नामुमकिन प्रकार बनाता है और लौटाता है, कास्टिंग कैसे विफल हो जाता है?
अंत में, मैं इस विशेष उदाहरण में एक निरर्थक डेटटाइम रखना चाहता हूं।
संपादित समस्या यह है कि StringToNullableDatetime
विधि एक Datetime?
वापस आती है और कास्टिंग का कहना है कि से Datetime
परिवर्तित नहीं कर सकते जब से StringToNullableDatetime
विधि एक नल दिनांक देता है, यह कैसे संभव है कि Convert.ChangeType
कि पारित नहीं देख सकते हैं तर्क शून्य है?
Ps। मैंने this जैसे उत्तरों को पढ़ा है जो विपरीत (नाली योग्य से कास्टिंग) करते हैं।
मान शून्य है और रूपांतरण प्रकार एक मान प्रकार
Nullable<T>
एक struct और इसलिए एक मान प्रकार है, इस प्रकार आप नहीं कर सकते:
मेरे सवाल का संपादन किया। मेरी समस्या यह है कि मैं एक नामुमकिन डेटाटाइम वापस नहीं कर सकता। 'कनवर्ट। चेंज टाइप' लाइन नहीं देख सकती है कि उत्तीर्ण तर्क शून्य है – Odys