C# 带有ref关键字的Null合并运算符

C# 带有ref关键字的Null合并运算符,c#,operators,ref,null-coalescing-operator,C#,Operators,Ref,Null Coalescing Operator,编辑 这是对我的问题更好的解释。特别是回答“为什么我要使用引用,为什么不直接使用double?”这个问题 所以我实际上有以下变量: double? Left_A, Left_B; double? Right_A, Right_B; double? Result_Left, Result_Right; 用户可以设置左侧变量的值,也可以设置右侧变量的值。它在我的ViewModel中处理。我正在计算结果的值,基于 一些公式,如result=a*b等 左变量或右变量的公式相同 因此,我只想创建一个类似

编辑

这是对我的问题更好的解释。特别是回答“为什么我要使用引用,为什么不直接使用
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;
我希望我在这件事上没有做错什么


我正试着用

我的派遣声明如下:

注:根据我这里省略的业务逻辑,保证a和b都不为空。它们中的任何一个都有一个值

double? x = a ?? b;   // a and b are also of type "double?".
但是,我希望
x
是一个引用类型变量。这可能吗

我尝试了以下方法,但都出现了编译错误。特别是最后一个:

  • ref-double?x=参考(a??b)

  • ref-double?x=参考a??参考文献b

  • ref-double?x=(参考a)??(参考b)

  • ref-double?param1=ref(请工作!!!-。-)

有什么想法吗

//保证其中一个a/b不为空

这不是保证。它只检查
a
是否为空,如果为空,则将
b
分配给
x

如果两个变量都是
double?
且不需要可为空的结果,则可以使用
.GetValueOrDefault()

double x = (a ?? b).GetValueOrDefault();
double x = (a ?? b).GetValueOrDefault(-0.5); // Or this.

可以通过以下方法完成:

ref double? GetValue(ref double? a, ref double? b) {
    if (a == null) return ref b; else return ref a;
}
那么


我不认为可以使用空合并运算符来完成此操作。

这里不需要使用
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);

不,我的意思是,根据我的业务逻辑,a和b都不会为空。我并不是说下一个声明将确保..请检查编辑,我现在已经说清楚了:)答案与问题无关。您甚至没有解决
ref
问题。@adjan当然,因为问题不是很清楚。仍然不清楚您想要什么。为什么要引用?为什么是两个变量?你希望他们如何同时成为一个?对我来说似乎是一个XY问题。我希望x是一个引用类型的变量-这是什么意思?你到底想达到什么目的?
double有什么问题?x=a??b?那么,也许你想使用指针?它们几乎都是引用。@OfirWinegarten Pl.检查编辑。虽然这在C#7中是有效的语法,但这里的重点是什么?为什么不干脆
double?x=a??b?@OfirWinegarten的要点是更改原始变量,但不确定为什么。VijayChavda,你能告诉我们你真正想要的是什么吗?OP没有提到任何函数。。。我看不出有什么意义。@Dennis_E虽然我没想到我会需要一个函数,但无论如何我都会尝试这种方法。如果您需要更好的解释,请检查编辑。我实际上希望更改反映在原始变量(L/R)中。。。我也很好奇怎么做??和ref一起工作:)结果是,我们不能!那么为什么不把这些变量和逻辑封装在一个类中,每次都用它来提供结果呢?好建议。但每次检查是否必须将结果分配给L/R的困境仍然存在。根据您的想法,也许我可以在这些方法中使用
out
params。。
result = (double) (leftA ?? rightA) * (double) (leftB ?? rightB);