C# 是可为空的十进制的可为空的整数后代

本文关键字:后代 整数 十进制 | 更新日期: 2023-09-27 18:11:17

我错误地发现了一些让我感到惊讶的东西。

我有这个方法

public static string PrintDecimal(decimal? input, string NumberFormat = null){ }

我这样称呼这种方法

int? MaxFaltas = 0;
Label.Text = CustomConvert.PrintDecimal(MaxFaltas);

为什么这是有效的,没有编译错误。我正在调用一种方法 女巫被定义为接收带有int?decimal?

C# 是可为空的十进制的可为空的整数后代

您刚刚发现了规范中描述为提升运算符的内容。

它们允许您将Nullablt<A>转换为Nullable<B>,只要A可以转换为B

6.4.2 提升转换运算符

给定一个用户定义的转换运算符,该运算符从 不可为空的值类型S为不可为空的值类型T,提升 存在从 S? 转换为 T? 的转换运算符。这解除了 转换运算符执行从 S?S 的解包,然后 用户定义的从ST的转换,后跟从T的包装 到 T? ,除了值null S?直接转换为值null T? .

这是有效的,因为 int 可以隐式转换为小数,因此可空版本也可以隐式转换。

FROM   TO
int    long , float, double, or decimal

https://msdn.microsoft.com/en-us/library/y5b434w4.aspx

http://blogs.msdn.com/b/ericlippert/archive/2007/06/27/what-exactly-does-lifted-mean.aspx