我找不到任何可以解决此问题的地方。 我写了一个单元测试来测试这种方法
public double CalculateTotalWeight()
{
double result = 0;
if (Store?.TypeOfRacquet.Any())
{
result = Store.TypeOfRacquet.Sum(m => m.Weight);
}
return result;
}
由于nullexceptionreference
对象未在Weight属性上初始化,因此单元测试失败。
如何检查是否存在Weight属性,或者weight属性已初始化?
我尝试了很多方法
if (Store?.TypeOfRacquet.Any())
if (Store?.TypeOfRacquet.Where(m => m.Weight != null)
if (Store?.TypeOfRacquet.First().Weight != null)
编辑
这是我在TypeOfRacquet内的Weight属性
public int Weight
{
get { return Get<int>(); }
set { Set(value); }
}
我的单元测试
[TestMethod]
public void CalculateTotalt_Without_Weight_Test()
{
var entity = new Store
{
TypeOfRacquet = new TypeOfRacquet
{
Id = Guid.NewGuid()
}
};
var result = entity.CalculateTotalWeight();
Assert.AreEqual(0, result);
}
调试时,我得到System.NullReferenceException:对象引用未设置为对象的实例
答案 0 :(得分:3)
最可能的问题是您的TypeOfRacquet
为空。在尝试调用if
方法之前,还应该在Any
条件下检查该条件:
double result = 0;
if (Store?.TypeOfRacquet != null && Store.TypeOfRacquet.Any())
{
result = Store.TypeOfRacquet.Sum(m => m.Weight);
}
return result;
或更简单地说:
return Store?.TypeOfRacquet?.Sum(m => m.Weight) ?? 0;
答案 1 :(得分:0)
感谢大家的帮助,这就是我所做的对我有用的
if (Store != null)
{
foreach (var racquet in Store.TypeOfRacquet)
{
result += racquet.Weight;
}
}