c# ?: 带有 ref 参数的运算符

c# ?: Operator with ref parameter

我有以下 class:

public class SubStredisko
{
    public string Name { get; set; }
    public string Code { get; set; }

    public VyplatnePasky VyplatnaPaska { get; set; }
    public MzdoveNaklady MzdoveNaklady { get; set; }
    public Poistne Poistne { get; set; }
}

然后我有两个 SubStredisko 项目,其中一个肯定是 null。我想做的是,我有一个单独的方法,它使用 SubStredisko 进行一些处理,例如更改 VyplatnaPaska 等的值。它看起来像这样:

    private static void VyplatnePasky_Items(ref Stredisko stredisko, XElement myElement)
    {
        //some logic here
    }

我现在尝试做的(我遇到的问题)是按以下方式使用 ?: 运算符调用此方法:

VyplatnePasky_Items((sPracovisko == null) ? ref sPracovisko_Dohodari : ref sPracovisko,xElement);

但是它突出显示 sPracovisko_DohodarisPracovisko 并出现以下错误:Syntax error, ':' expected.

我试图将它们分别放在括号中,但是没有成功。 我做错了什么?

P.S。 sPracoviskosPracovisko_Dohodari 属于 SubStredisko.

类型

P.S.2:只是一个快速的想法——也许我在这里甚至不需要 ref 参数?我不太确定在这种情况下是否会创建一个新对象,或者我会(在我的空白中)直接更改该特定对象的值。

您不能对 ref 参数使用表达式。您需要两个电话:

if (sPracovisko == null) {
  VyplatnePasky_Items(ref sPracovisko_Dohodari, xElement);
} else {
  VyplatnePasky_Items(ref sPracovisko, xElement);
}

ref 参数必须是 变量。它不能像您尝试做的那样是三元表达式。您可以这样做:

var inputParameter = sPracovisko == null ? sPracovisko_Dohodari : sPracovisko;
VyplatnePasky_Items(ref inputParameter, xElement);

请注意,使用上面的代码,更改将反映在 inputParamter 上,并且不会影响其他两个变量。如果您希望更改变量本身,请使用@Guffa 的回答。

试试这个

VyplatnePasky_Items(((sPracovisko == null) ? ref sPracovisko_Dohodari :   sPracovisko),xElement);

VyplatnePasky_Items(((sPracovisko == null) ? ref sPracovisko_Dohodari :   sPracovisko) out,xElement);

如@GlennSlayden 的评论中所述,您可以使用 ?:(三元条件)和来自 C# 7 / VS2017 的 ref,使用以下语法:

int a = 1;
int b = 2;
bool condition = true;

ref int i = ref (condition ? ref a : ref b);