无法将TypeType从字符串更改为int?

时间:2016-11-13 01:48:14

标签: c# .net casting type-conversion

在我们的应用程序的深处,尝试使用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,还是应该查看重构?

2 个答案:

答案 0 :(得分:2)

根据Convert.ChangeType

  

ChangeType(Object, Type)方法可以将可空类型转换为另一种类型。但是,它无法将其他类型转换为可空类型的值,即使conversionTypeNullable<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的值,我们假设我们有转换类型的值