用表达式代替语句 - c#

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

这个问题可以使用C ++的邪恶逗号运算符解决,在JS中使用立即调用的箭头函数在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

在PHP中使用long int - php

我正在尝试此方法,但无法存储较大的价值$var = rand(100000000000000,999999999999999); echo $var; // prints a 9 digit value(largest possible) 如何获得期望值? 参考方案 PHP整数通常为32位。其他软件包提供了更高精度的整数:http://php.net/man…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4