如何轻松地将语句转换为表达式而不会有太多困惑?
我想更新一个变量,然后从 ?: 运算符内部“返回”一个不同的值并将其存储在变量中。

这个问题可以使用 C++ 的邪恶逗号运算符来解决,在 JS 中使用立即调用的箭头函数,在 F# 中,由于所有 ifs 都是表达式等。

为了确保清楚,我将编写 C++ 代码来执行我想要的操作:

MyStruct obj;
int x = NULL;
x = x ? x : (setObj(obj), obj.x);

但这在 C# 中看起来非常难看,因为没有逗号运算符,并且使用一个参数和一行来更新变量和另一行来检索值来创建匿名 Func 的语法已经占用了更多空间并使代码比仅使用普通的 if 语句可读性差。

最佳答案

更新以回答您更新的问题并使用 ??= 运算符:

如果 setObj 返回对象,则:

x ??= setObj(obj).x

如果 setObj 返回的不是 void :
x ??= (setObj(obj) is var _ ? obj.x : 0);

如果 setObj 返回 void (根据@haim770 评论):
x ??= new Func<MyStruct>(() => { setObj(obj); return obj; })().x;

后两者的可读性值得怀疑。

对原始问题的回答:

怎么样:
MyStruct obj;
int? x = null;
x ??= (obj = getObj()).x

关于c# - 表达式代替语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59664365/

10-14 06:48