我创建一个通用的转换器无法更改类型泛型方法
这里可为空是一般的转换器
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