我創建一個通用的轉換器無法更改類型泛型方法
這裏可爲空是一般的轉換器
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>
。既然,該方法創建並返回一個可爲空的類型,那麼該投射如何失敗?
最後,我想在這個特定的例子中有一個可爲空的DateTime。
編輯的問題是,StringToNullableDatetime
方法返回一個Datetime?
和鑄造說,不能從Datetime
轉換由於StringToNullableDatetime
方法返回一個可爲空的日期時間,它怎麼可能是Convert.ChangeType
無法看到通過論點是可空的?
Ps。我已經閱讀了this這樣的答案,可以做相反的事情(從可空值轉換)。
值爲null和conversionType是值類型
Nullable<T>
是一個結構,因此值類型,因而不能:
編輯我的問題。我的問題是我不能返回一個可空的日期時間。 'Convert.ChangeType'行看不到傳遞的參數是可空的 – Odys 2012-04-25 15:20:24