C# 是否有空值的加法赋值运算符的简写,用于设置空值?
我使用可为空的double来存储从各种来源提取的一些值的总和。如果不存在元素,则总和可以是任何实数或null 目前,我使用空检查并赋值或递增:C# 是否有空值的加法赋值运算符的简写,用于设置空值?,c#,nullable,C#,Nullable,我使用可为空的double来存储从各种来源提取的一些值的总和。如果不存在元素,则总和可以是任何实数或null 目前,我使用空检查并赋值或递增: double? sum = null; ... if(sum == null) sum = someTempValue; else sum += someTempValue; 我知道c#对方法调用等进行了几次速记空检查。我的问题是,当使用nullables在null时赋值,或者在非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:我的回答只是想说明?
解决方案作为一个紧凑型产品有一个缺陷:很容易得到错误的公式。