c#?:具有ref参数

时间:2015-08-20 08:15:57

标签: c# logical-operators

我有以下课程:

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参数在这里?我不太确定在这种情况下是否会创建一个新对象,或者我将(在我的空白中)直接更改该特定对象的值。

3 个答案:

答案 0 :(得分:5)

您无法使用ref参数的表达式。你需要两个电话:

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

答案 1 :(得分:2)

ref参数必须是变量。它不能像你想要的那样是一个三元表达。你可以这样做:

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

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

答案 2 :(得分:0)

试试这个

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

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