В настоящее время я использую этот удобный метод расширения для преобразования между типами:
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, у кого-нибудь есть отличные идеи?