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?
您刚刚发现了规范中描述为提升运算符的内容。
它们允许您将Nullablt<A>
转换为Nullable<B>
,只要A
可以转换为B
。
6.4.2 提升转换运算符
给定一个用户定义的转换运算符,该运算符从 不可为空的值类型
S
为不可为空的值类型T
,提升 存在从S?
转换为T?
的转换运算符。这解除了 转换运算符执行从S?
到S
的解包,然后 用户定义的从S
到T
的转换,后跟从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