为什么C#的System.Convert转换(字符串)为(int),而不是(字符串)为(int?)?

时间:2016-02-29 15:58:11

标签: c# casting nullable

如果我运行以下代码:

(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类型的转换?

1 个答案:

答案 0 :(得分:5)

Convert.ChangeType早在.NET中可以为空的值之前,所以它不可能是一个黑客。现在使用Convert的理由非常少。

为什么这是一个黑客?好吧,您要求Convert连续执行多次转换,同时还要意识到错误的值应该在" real"中表示为null。回报价值。在.NET中永远不会发生多次隐式转换。 intint?是完全独立的类型,只有C#编译器才能让您认为它们能够很好地协同工作 - 它只是语法糖。当您只是调用返回object的随机方法时,语法糖不起作用:)

如果您需要此功能,只需编写自己的包装器,它总是返回一个可为空的。

相关问题