Я не могу найти ничего, где можно было бы решить эту проблему. Я написал модульный тест для проверки этого метода

    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)

РЕДАКТИРОВАТЬ

Вот мое свойство Weight внутри TypeOfRacquet

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: ссылка на объект не установлена на экземпляр объекта

-3
Dnguy025 23 Окт 2018 в 17:41

2 ответа

Лучший ответ

Спасибо, ребята, за помощь, это то, что я сделал, у меня работает

if (Store != null)
{
    foreach (var racquet in Store.TypeOfRacquet)
    {
        result += racquet.Weight;
    }
}
0
Dnguy025 23 Окт 2018 в 18:09

Скорее всего, проблема в том, что ваш 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;
3
Rufus L 23 Окт 2018 в 14:58
52951818