如果我运行以下代码:
(int)Convert.ChangeType("3", typeof(int))
结果是3
。真棒。
如果我将其更改为:
(int?)Convert.ChangeType("3", typeof(int?))
结果是
从'System.String'到'System.Nullable`1的无效转换 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral, 公钥= b77a5c561934e089]]”。
然而,它处理这个很好:
(int?)Convert.ChangeType("3", typeof(int))
为什么它不能直接处理到可以为空的int类型的转换?
答案 0 :(得分:5)
Convert.ChangeType
早在.NET中可以为空的值之前,所以它不可能是一个黑客。现在使用Convert
的理由非常少。
为什么这是一个黑客?好吧,您要求Convert
连续执行多次转换,同时还要意识到错误的值应该在" real"中表示为null
。回报价值。在.NET中永远不会发生多次隐式转换。 int
和int?
是完全独立的类型,只有C#编译器才能让您认为它们能够很好地协同工作 - 它只是语法糖。当您只是调用返回object
的随机方法时,语法糖不起作用:)
如果您需要此功能,只需编写自己的包装器,它总是返回一个可为空的。