将null传递给具有可为空的十进制参数的方法

时间:2016-04-08 19:48:31

标签: c#

我有一个接受可空小数的方法,签名看起来有点像这样:

public void MyMethod(decimal? param1)

我传递的内容是有条件的,所以我要么传递小数值,要么为空。

MyMethod((PassNullIfThisIsTrue) ? null : passThisDecimal);

VisualStudio说我不能这样做,因为在null和decimal之间隐式转换。所以我将null作为可以为空的十进制:

MyMethod((PassNullIfThisIsTrue) ? (decimal?)null : passThisDecimal);

VisualStudio很高兴,但是当我将此抛出null时,我发现param1等于0。

有人可以解释这里发生的事情和/或处理这种情况的最佳方法吗?我应该注意,我不想更改passThisDecimal的值。提前谢谢!

3 个答案:

答案 0 :(得分:0)

(?decimal)语法应该是(decimal?)

这样做

MyMethod((PassNullIfThisIsTrue) ? null : (decimal?)passThisDecimal);

或者这个

MyMethod((PassNullIfThisIsTrue) ? (decimal?)null : passThisDecimal);

答案 1 :(得分:0)

  

VisualStudio很高兴,但是当我将此抛出null时,我发现param1等于0。

有可能PassNullIfThisIsTrue实际上是假的,所以你传递的是非空的passThisDecimal值,我此时猜测为零。

换句话说,您正在使用的代码是正确的(即使您在此处发布的代码有拼写错误,以防止它编译),但您没有提供适当的输入来测试您希望点击的代码路径。

答案 2 :(得分:0)

你可以这样做:

MyMethod(PassNullIfThisIsTrue ? null : new decimal?(passThisDecimal));
相关问题