C#是可空的int可空小数的后代

Jua*_*DYB 2 c# nullable decimal

我错误地发现了令我惊讶的事情.

我有这个方法

public static string PrintDecimal(decimal? input, string NumberFormat = null){ }
Run Code Online (Sandbox Code Playgroud)

我把这种方法称为这样

int? MaxFaltas = 0;
Label.Text = CustomConvert.PrintDecimal(MaxFaltas);
Run Code Online (Sandbox Code Playgroud)

为什么这是有效的,没有编译错误.我正在调用一个定义为接收a decimal?的方法int?

Mar*_*zek 8

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

他们让你转换Nullablt<A>Nullable<B>只要A可以转换为B.

6.4.2提升转换运营商

鉴于从非空值类型转换用户定义的转换运算符S到一个非空值类型T,一个提升转换运算符存在从转换S?T?.这个提升的转换运算符执行从展开S?到展开,S然后是用户定义的转换S,T然后是从换行T 到换行T?,除了nullS?直接转换为null有价值 T?.