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想要的。看起来我实际上需要做这两件事。谢谢你的回答。看来我需要