如何轻松地将语句转换为表达式而不会有太多困惑?
我想更新一个变量,然后从 ?: 运算符内部“返回”一个不同的值并将其存储在变量中。
这个问题可以使用 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/