This question already has answers here:
How to use Convert.ChangeType() when conversionType is a nullable int
                                
                                    (3个答案)
                                
                        
                                3年前关闭。
            
                    
在我们应用程序的深度中,尝试使用Convert.ChangeType(value, castType)将字符串转换为可为null的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还是应该考虑重构?

最佳答案

您需要编写如下内容:

var value = "00010";
short? w = value == null ? null : (short?)Convert.ChangeType("00010", typeof(short));


ChangeType不能与Nullable<T>一起使用-如果我们有value的值,则假定我们有转换后的类型的值

10-08 01:49