You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在三元运算符中向TakeHit函数传递ref参数?

结论:你的写法完全合法且正确

首先明确:你用TakeHit(ref isRed ? ref red : ref blue);这种写法是符合C#语法规范的,而且逻辑上和if-else分支的效果完全一致。

为什么合法?

这是C# 7.0及以后版本支持的ref条件表达式特性:当三元运算符的两个分支都返回ref类型的表达式(且类型兼容,这里都是ref Player),整个表达式就能作为ref参数传递给函数。

效果等价于if-else

这段代码和下面的if-else写法没有任何区别:

if (isRed)
{
    TakeHit(ref red);
}
else
{
    TakeHit(ref blue);
}

函数TakeHit内部对ref Player player的任何修改,都会直接作用到red或blue实例本身,因为传递的是它们的引用。

验证示例

比如给Player加个Health属性,测试一下:

public class Player
{
    public int Health { get; set; }
}

void TakeHit(ref Player player)
{
    player.Health -= 10;
}

// 调用代码
Player red = new Player { Health = 100 };
Player blue = new Player { Health = 100 };
bool isRed = true;

TakeHit(ref isRed ? ref red : ref blue);
Console.WriteLine(red.Health); // 输出90,符合预期

所以你完全可以放心用这种写法,它只是if-else的简洁版而已。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 06:21:36