我目前使用这种方便的转换扩展方法来进行类型之间的转换:
public static T To<T>(this IConvertible obj)
{
return (T)Convert.ChangeType(obj, typeof(T));
}
但是,它不喜欢将有效值转换为 Nullable,例如,这会失败:
"1".To<int?>();
显然,1 很容易转换为 (int?),但它得到了错误:
Invalid cast from 'System.String' to 'System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.
这是一个明显简化的示例,实际上我使用它来进行字符串类型的转换,如下所示:
packageDb.Quantity = package.package.ElementDeep(Namespace + "PackageQuantity", Namespace + "ActualQuantity", Namespace + "Quantity").ValueOrNull().To<int?>();
如果 Convert.ChangeType 不喜欢 Nullable,那么有人有什么好主意吗?