C# 添加两个不起作用的可为空整数
我有一个很奇怪的问题。这个问题看起来既有趣又简单,但却让我发疯 我在一个声明为C# 添加两个不起作用的可为空整数,c#,nullable,C#,Nullable,我有一个很奇怪的问题。这个问题看起来既有趣又简单,但却让我发疯 我在一个声明为 public int? count { get; set; } 我有这个类的一个对象数组(additionalCell)和同一类的另一个对象currentPixelTotalCell。我想添加数组中所有对象的count变量的值,并将其存储在currentPixelTotalCell的count变量中 我的代码如下。但在调试时,我看到左侧部分只有在循环退出后才具有null值,尽管所有对象中的count变量都具有非nu
public int? count { get; set; }
我有这个类的一个对象数组(additionalCell)和同一类的另一个对象currentPixelTotalCell。我想添加数组中所有对象的count变量的值,并将其存储在currentPixelTotalCell的count变量中
我的代码如下。但在调试时,我看到左侧部分只有在循环退出后才具有null值,尽管所有对象中的count变量都具有非null值
for(int i = 0; i < 5; i++)
{
currentPixelTotalCell.count += additionalCell[i].count;
}
for(int i=0;i<5;i++)
{
currentPixelTotalCell.count+=additionalCell[i].count;
}
知道为什么会这样吗?是否有其他方法添加它们?我不懂
编辑:
忘了提这件事了。当我有了断点并签入第一个迭代本身时,它就不起作用了。
如果附加单元格[0],则计数为10。那么currentPixelTotalCell.count的值过去只有在第一次迭代中执行内行之后才为null。如果结果为
null
为currentPixelTotalCell.count
null
- 某些附加单元格[i]。计数为
null
null
都在控制之下
// currentPixelTotalCell.count is not null
currentPixelTotalCell.count = 0;
for(int i = 0; i < 5; i++)
{
// if additionalCell[i].count is null treat it as 0
currentPixelTotalCell.count += additionalCell[i].count ?? 0;
}
如果结果为
null
,则
为currentPixelTotalCell.count
null
- 某些附加单元格[i]。计数为
null
null
都在控制之下
// currentPixelTotalCell.count is not null
currentPixelTotalCell.count = 0;
for(int i = 0; i < 5; i++)
{
// if additionalCell[i].count is null treat it as 0
currentPixelTotalCell.count += additionalCell[i].count ?? 0;
}
将内部循环更改为:
currentPixelTotalCell.count += (additionalCell[i].count ?? 0);
避免在其中一个右撇子值为空时将总数设置为空。将内部循环更改为:
currentPixelTotalCell.count += (additionalCell[i].count ?? 0);
避免在右撇子值之一为空时将总数设置为空。我猜结果是
null
,因为其中一个值为null
那么:
currentPixelTotalCell.count += additionalCell.Select(x => x.count)
.Where(x => x.HasValue)
.Sum();
或
不要忘记初始化currentPixelTotalCell.count或用简单赋值替换
+=
,我猜结果是null
,因为其中一个值是null
那么:
currentPixelTotalCell.count += additionalCell.Select(x => x.count)
.Where(x => x.HasValue)
.Sum();
或
不要忘记初始化currentPixelTotalCell.count
某个地方,或者用一个简单的赋值替换=
是否需要先将currentPixelTotalCell.count
变量初始化为0
currentPixelTotalCell.count = 0;
for(int i = 0; i < 5; i++)
{
currentPixelTotalCell.count += additionalCell[i].count;
}
currentPixelTotalCell.count=0;
对于(int i=0;i<5;i++)
{
currentPixelTotalCell.count+=additionalCell[i].count;
}
或者您可能需要检查其他单元格对象中的空值
for(int i = 0; i < 5; i++)
{
currentPixelTotalCell.count += (additionalCell[i].count ?? 0)
}
for(int i=0;i<5;i++)
{
currentPixelTotalCell.count+=(附加单元格[i].计数??0)
}
是否需要先将currentPixelTotalCell.count
变量初始化为0
currentPixelTotalCell.count = 0;
for(int i = 0; i < 5; i++)
{
currentPixelTotalCell.count += additionalCell[i].count;
}
currentPixelTotalCell.count=0;
对于(int i=0;i<5;i++)
{
currentPixelTotalCell.count+=additionalCell[i].count;
}
或者您可能需要检查其他单元格对象中的空值
for(int i = 0; i < 5; i++)
{
currentPixelTotalCell.count += (additionalCell[i].count ?? 0)
}
for(int i=0;i<5;i++)
{
currentPixelTotalCell.count+=(附加单元格[i].计数??0)
}
有一个名为的方法,它将为您提供可为空的的默认值。如果值为null
,则可以使用它分配0
:
for(int i = 0; i < 5; i++)
{
currentPixelTotalCell.CmvF =currentPixelTotalCell.CmvF.GetValueOrDefault() + additionalCell[i].CmvF.GetValueOrDefault();
}
for(int i=0;i<5;i++)
{
currentPixelTotalCell.CmvF=currentPixelTotalCell.CmvF.GetValueOrDefault()+附加单元格[i].CmvF.GetValueOrDefault();
}
有一个名为的方法,它将为您提供可为空的的默认值。如果值为null
,则可以使用它分配0
:
for(int i = 0; i < 5; i++)
{
currentPixelTotalCell.CmvF =currentPixelTotalCell.CmvF.GetValueOrDefault() + additionalCell[i].CmvF.GetValueOrDefault();
}
for(int i=0;i<5;i++)
{
currentPixelTotalCell.CmvF=currentPixelTotalCell.CmvF.GetValueOrDefault()+附加单元格[i].CmvF.GetValueOrDefault();
}
在访问currentPixelTotalCell.count之前,需要将其初始化为0
请记住,“a+=b”只是“a=a+b”的语法糖
因为a是空的,所以实际上是在做“a=null+b”和null加上等于null的东西
同样由于相同的约束,您需要确保右侧的值也不为null。在您的案例中,更简单的方法是简单地使用GetValuerDefault方法
尽管如此,您的最终解决方案应该是:
currentPixelTotalCell.count = 0;
for(int i = 0; i < 5; i++)
{
currentPixelTotalCell.count += additionalCell[i].count.GetValueOrDefault();
}
currentPixelTotalCell.count=0;
对于(int i=0;i<5;i++)
{
currentPixelTotalCell.count+=additionalCell[i].count.GetValueOrDefault();
}
在访问currentPixelTotalCell.count之前,需要将其初始化为0
请记住,“a+=b”只是“a=a+b”的语法糖
因为a是空的,所以实际上是在做“a=null+b”和null加上等于null的东西
同样由于相同的约束,您需要确保右侧的值也不为null。在您的案例中,更简单的方法是简单地使用GetValuerDefault方法
尽管如此,您的最终解决方案应该是:
currentPixelTotalCell.count = 0;
for(int i = 0; i < 5; i++)
{
currentPixelTotalCell.count += additionalCell[i].count.GetValueOrDefault();
}
currentPixelTotalCell.count=0;
对于(int i=0;i<5;i++)
{
currentPixelTotalCell.count+=additionalCell[i].count.GetValueOrDefault();
}
您需要提取可空值的值。而不是.count
它应该是.count.Value
@LukaJacobowitz:如果没有值,它将抛出异常。不确定这是否是OP想要的。您需要提取nullable的值。而不是.count
它应该是.count.Value
@LukaJacobowitz:如果没有值,它将抛出异常。不确定这是否是OP想要的。看起来我实际上需要做这两件事。谢谢你的回答。看来我需要