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

Isa*_*man 0 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,PublicKeyToken = b77a5c561934e089]]'的无效演员表.

但是,它处理这个很好:

(int?)Convert.ChangeType("3", typeof(int))

为什么它不能直接处理转换为可空的int类型?

Lua*_*aan 5

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

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

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