我有一个接受可空小数的方法,签名看起来有点像这样:
public void MyMethod(decimal? param1)
我传递的内容是有条件的,所以我要么传递小数值,要么为空。
MyMethod((PassNullIfThisIsTrue) ? null : passThisDecimal);
VisualStudio说我不能这样做,因为在null和decimal之间隐式转换。所以我将null作为可以为空的十进制:
MyMethod((PassNullIfThisIsTrue) ? (decimal?)null : passThisDecimal);
VisualStudio很高兴,但是当我将此抛出null时,我发现param1等于0。
有人可以解释这里发生的事情和/或处理这种情况的最佳方法吗?我应该注意,我不想更改passThisDecimal的值。提前谢谢!
答案 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));