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

时间:2015-09-03 22:46:09

标签: c# decimal nullable

我发现了一些让我感到惊讶的事情。

我有这个方法

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

我将这种方法称为

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

为什么这样做有效且没有编译错误。我调用的方法是定义为接收decimal? int?

2 个答案:

答案 0 :(得分:8)

您刚刚发现规范中描述的内容为lifted operators

只要Nullablt<A>可以转换为Nullable<B>,他们就可以将A转换为B

  

6.4.2提升转化运算符

     

给定一个用户定义的转换运算符,它从a转换   非可空值类型S到非可空值类型T,已解除   转换运算符存在,可从S?转换为T?。这解除了   转化运算符执行从S?S的展开,然后执行   用户定义的从ST的转化,然后是T的换行   到T?,除了nullS?直接转换为null值   T?

答案 1 :(得分:4)

这是有效的,因为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