在我们的应用程序的深处,尝试使用Convert.ChangeType(value, castType)
执行从字符串到可空int的转换。在这种情况下,值如下:
value: "00010"
castType: Nullable<System.Int16>
问题是我收到以下错误
Invalid cast from 'System.String' to 'System.Nullable`1[[System.Int16}
我(显然不正确)认为这类似于演员表或Convert.ToInt16(),但我通过测试以下两行代码验证了它不一样。
Int16 t = Convert.ToInt16("00010");
object w = Convert.ChangeType("00010", typeof(short?));
正如您可能怀疑的那样,第一个成功,而第二个失败并显示上面的错误消息。
是否可以通过调整以这种方式使用ChangeType,还是应该查看重构?
答案 0 :(得分:2)
ChangeType(Object, Type)
方法可以将可空类型转换为另一种类型。但是,它无法将其他类型转换为可空类型的值,即使conversionType
是Nullable<T>
的基础类型也是如此。 要执行转换,您可以使用转换运算符(在C#中)或转换函数(在Visual Basic中)。
所以,试试:
var w = (short?)Convert.ChangeType("00010", typeof(short));
答案 1 :(得分:2)
你需要写这样的东西:
var value = "00010";
short? w = value == null ? null : (short?)Convert.ChangeType("00010", typeof(short));
ChangeType
不适用于Nullable<T>
- 如果我们有value
的值,我们假设我们有转换类型的值