c# ?:带有 ref 参数的运算符
本文关键字:参数 运算符 ref 带有 | 更新日期: 2023-09-27 18:08:48
我有以下类:
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
并显示以下错误sPracovisko
:Syntax error, ':' expected
。
我试图将它们分别放在括号中,但没有运气。我做错了什么?
附言 sPracovisko
和sPracovisko_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);