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



我有以下类:

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_Dohodari并显示以下错误sPracoviskoSyntax error, ':' expected

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

附言 sPracoviskosPracovisko_Dohodari属于 SubStredisko 型。

PS 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);

最新更新