首页 > 解决方案 > C#8:切换 ref 表达式

问题描述

我不知道如何让 switch 表达式产生一个ref值。

bool cond = true;
int a = 1, b = 2;

// This works
ref int c = ref cond ? ref a : ref b;

// But using a switch expression fails to compile.
// Error CS1525 Invalid expression term 'ref'
c = ref (cond switch { true => ref a, false => ref b });

我的语法错了吗?这甚至可能吗?

无论我是否包含外部ref ( )部分,它都不会编译。我用abool只是为了快速说明问题,但我的实际用例并不是那么简单。

标签: c#refc#-8.0switch-expression

解决方案


是的,语法错误。由于您在问题中记录的编译器错误代码(CS1525),这一点非常清楚。

为什么?switch 表达式似乎与 refs 不兼容。

不要与编译器对抗,只需以有效且易于阅读的方式编写代码。这是写它的老式方法:

ref int c = ref a;

if (!cond)
{
    c = ref b;
}

推荐阅读