Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有空值的加法赋值运算符的简写,用于设置空值?_C#_Nullable - Fatal编程技术网

C# 是否有空值的加法赋值运算符的简写,用于设置空值?

C# 是否有空值的加法赋值运算符的简写,用于设置空值?,c#,nullable,C#,Nullable,我使用可为空的double来存储从各种来源提取的一些值的总和。如果不存在元素,则总和可以是任何实数或null 目前,我使用空检查并赋值或递增: double? sum = null; ... if(sum == null) sum = someTempValue; else sum += someTempValue; 我知道c#对方法调用等进行了几次速记空检查。我的问题是,当使用nullables在null时赋值,或者在非null时执行操作时,加法赋值运算符+=是否有简

我使用可为空的double来存储从各种来源提取的一些值的总和。如果不存在元素,则总和可以是任何实数或null

目前,我使用空检查并赋值或递增:

double? sum = null;
...    
if(sum == null)
    sum = someTempValue;
else
    sum += someTempValue;

我知道c#对方法调用等进行了几次速记空检查。我的问题是,当使用nullables在
null
时赋值,或者在
非null
时执行操作时,加法赋值运算符
+=
是否有简写符号?

您可以将三元运算符:

double? sum = null;
sum = sum == null ? someTempValue : sum + someTempValue;


归功于:对于最后一个选项

,您可以设置三元运算符:

double? sum = null;
sum = sum == null ? someTempValue : sum + someTempValue;

归功于:最后一个选项不是真正的捷径,但非常紧凑:

sum==null
时,将
sum
视为
0
。但是,请注意,
??
操作员可能很危险:

不是真正的捷径,但非常紧凑:

sum==null
时,将
sum
视为
0
。但是,请注意,
??
操作员可能很危险:


从帖子上看不太清楚,但看起来
sometmpvalue
不可为空的,否则
if
逻辑将不起作用,因为
+
运算符将在
sometmpvalue
null
时销毁先前的和

如果这是真的,那么您可以利用null合并操作符和
null+value==null

sum = (sum + someTempValue) ?? someTempValue;
如果
someTempValue
也可为空,则正确的逻辑为:

sum = (sum + someTempValue) ?? someTempValue ?? sum;
依我看,不管是否速记,最好将这种逻辑放在一种方法中

public static class MathUtils
{
    public static double? Add(double? left, double? right)
    {
        // The avove shorthand
        return (left + right) ?? right ?? left;
        // or another one
        //return left == null ? right : right == null ? left : left + right;
    }
}
并使用简单的

sum = MathUtils.Add(sum, someTempValue);
或者使用静态功能的C#6
,甚至更短

sum = Add(sum, someTempValue);

从帖子上看不太清楚,但看起来
sometmpvalue
不可为空的,否则
if
逻辑将不起作用,因为
+
运算符将在
sometmpvalue
null
时销毁先前的和

如果这是真的,那么您可以利用null合并操作符和
null+value==null

sum = (sum + someTempValue) ?? someTempValue;
如果
someTempValue
也可为空,则正确的逻辑为:

sum = (sum + someTempValue) ?? someTempValue ?? sum;
依我看,不管是否速记,最好将这种逻辑放在一种方法中

public static class MathUtils
{
    public static double? Add(double? left, double? right)
    {
        // The avove shorthand
        return (left + right) ?? right ?? left;
        // or another one
        //return left == null ? right : right == null ? left : left + right;
    }
}
并使用简单的

sum = MathUtils.Add(sum, someTempValue);
或者使用静态
功能的C#6
,甚至更短

sum = Add(sum, someTempValue);


sum=sum==null?someTempValue:sum+someTempValue关于sum=(sum??0)+someTempValue呢?你的if语句有什么问题?把它放在一个单独的方法中?如果你到处都是
if语句,那么听起来你需要重新考虑你的设计,而不是担心速记空检查。sum=sum==null?someTempValue:sum+someTempValue那么sum=(sum±0)呢+someTempValue?你的if语句有什么问题?把它放在一个单独的方法中?如果你到处都是
if语句
,那么听起来你需要重新考虑你的设计,而不是担心速记空检查。这不是OP要求的加法赋值运算符的速记,但是我想这是可能的最短代码。啊,是的,说这是可能的最短代码比简单的加法赋值更合适
@Ian:三元运算符的典型用法(当
if-else
带来的只是复杂性,而不是可读性)+1啊,是的,正是你说的。:)这不是OP所要求的加法赋值运算符的简写,但我想这是可能的最短代码。啊,是的,说这是可能的最短代码比加法赋值的简写更合适
@Ian:三元运算符的典型用法(当
if-else
带来的只是复杂性,而不是可读性)+1啊,是的,正是你说的。:)向上投票,因为我的答案的最后一个选项来自你的comment@Ian:我的回答只是想说明
解决方案作为一个紧凑型产品有一个缺陷:很容易得到错误的公式。投票,因为我的答案最后一个选项来自你的comment@Ian:我的回答只是想说明
解决方案作为一个紧凑型产品有一个缺陷:很容易得到错误的公式。