从某个地方引用null我没有';我不知道在哪里
本文关键字:在哪里 我不知道 null 方引用 引用 | 更新日期: 2023-09-27 18:27:52
我以为我涵盖了所有空的可能性,但这一行:
double indicatorValue =
step2.Count() > 0 ? step2.Sum(iv => ((double?)iv.Value) ?? 0d) : 0d;
给我这个错误:
无法创建类型为"System.Int32[]"的null常数值。此上下文中只支持实体类型、枚举类型或基元类型。
拜托,我读过一些帖子,没有一篇能给我指明正确的方向。
编辑:相关代码?
var step1 = db.IndicatorValues
.Where(iv =>
iv.Year == _ano &&
iv.IdIndicator == item.IdIndicator &&
idSites.Contains(iv.IdSite)
);
var step2 = step1.Where(iv =>
(isYTD == true ? iv.Month <= _mes : iv.Month == _mes)
);
我能看到的"null"情况如下:
class Program
{
class Test
{
public decimal? Value { get; set; }
}
static void Main(string[] args)
{
var step2 = new Test[] { null };
double indicatorValue = step2.Count() > 0 ? step2.Sum(iv => ((double?)iv.Value) ?? 0d) : 0d;
Console.WriteLine(indicatorValue);
}
}
这给了我NullReferrence异常
为了进一步诊断您的问题,我建议在调试阶段使用step2Test = step2.ToArray()
,而不是表达式中的step2
变量
在获取数组实例的阶段,您可能会遇到与您在描述中所写的错误相同的错误,那么与indicatorValue
计算的逻辑无关
int数组中关于null的错误可以在这里:idSites.Contains(iv.IdSite)
可能的问题iv.IdSite
在特定情况下为空
请尝试以下
idSites.Contains(iv.IdSite)
放入
iv.IdSites == null ? false : ( idSites == null ? false : idSites.Contains(iv.IdSite))
根据代码的其余部分( a。将 b。在步骤2中过滤为 c。 不确定什么是step1
和step2
是IQueryable,而不是IEnumerablestep1
和step2
用于其他用途),您可以通过以下方式修复此问题:step2
转换为存储器内集合(例如使用.ToList()
)null
的IndicatorValues。double indicatorValue = step2.Count() > 0 ? step2.Where(iv => iv.HasValue).Sum(iv => iv.Value) : 0d;
iv.Value
类型,为什么需要将其转换为double?但其中一种解决方案可能会奏效。