修改
这是对我的问题的更好的解释。特别回答问题"为什么我要使用引用,为什么不使用double?
"。
所以我实际上有以下变量:
double? Left_A, Left_B;
double? Right_A, Right_B;
double? Result_Left, Result_Right;
用户可以设置左变量的值,也可以设置右变量的值。它在我的ViewModel中处理。我正在计算结果的值,基于
一些公式,如result = a * b
等。
左变量或右变量的公式相同。
所以我只想创建一个"指针"比如参考变量,' a'和' b',其值为Left_A
或Left_B
的值,因此我不必执行以下操作:
if(Left_A != null) {
Result_Left = Left_A * Left_B;
} else {
Result_Right = Right_A * Right_B;
}
//There are more such formulas for many use-cases..
我想要这样的东西..
ref double? result, a, b;
a = ref Left_A ?? ref Right_A; //This gives error.
b = ref (Left_B ?? Right_B); //This gives error.
result = Result_Left ?? Result_Right;
result = a * b;
我希望我在这方面没有做错......
我正在尝试将Null-coalescing operator与ref
keyword
我的任务说明如下:
注意:根据我在此省略的业务逻辑,保证了a& b不会为空。他们中的任何一个都有价值。
double? x = a ?? b; // a and b are also of type "double?".
但是我希望x
成为引用类型变量。这可能吗?
我尝试了以下操作,但所有这些都会出现编译错误。特别是最后一个:
ref double? x = ref (a ?? b);
ref double? x = ref a ?? ref b;
ref double? x = (ref a) ?? (ref b);
ref double? param1 = ref ( please work!!! -.-' );
有什么想法吗?
答案 0 :(得分:3)
可以通过以下方法完成:
ref double? GetValue(ref double? a, ref double? b) {
if (a == null) return ref b; else return ref a;
}
然后,
ref double? x = ref GetValue(ref a, ref b);
我不认为可以使用null-coalescing运算符来完成。
答案 1 :(得分:2)
此处无需使用ref
关键字。
以下内容适用:
double a = (double) (Left_A ?? Right_A);
double b = (double) (Left_B ?? Right_B);
double result = a * b;
或使用一个班轮:
result = (double) (leftA ?? rightA) * (double) (leftB ?? rightB);
答案 2 :(得分:0)
//保证a / b不为空。
不保证。它只检查a
是否为空,然后如果是,则将b
分配给x
。
如果您的变量都是double?
并且您不需要结果可以为空,那么您可以使用.GetValueOrDefault()
:
double x = (a ?? b).GetValueOrDefault();
double x = (a ?? b).GetValueOrDefault(-0.5); // Or this.