簡體   English   中英

c#?:帶參數的運算符

[英]c# ?: Operator with ref parameter

我有以下課程:

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

我試着將它們分開放在括號中,但沒有運氣。 我究竟做錯了什么?

PS sPracoviskosPracovisko_Dohodari屬於SubStredisko類型。

PS2:快速思考 - 也許我甚至不需要這里的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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM