2

При проверке value на null в индексаторе возникает ошибка:

System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.

Оператор != перегружен в классе Product. Можно ли выполнить проверку при помощи стандартного функционала !=, либо каким-нибудь другим способом.

class Stock
{
    private Product[] products;

    public Product this[int index]
    {
        get
        {
            return products[index];
        }
        set
        {
            if ((value as Product) != null) products[index] = value;
            else throw new ArgumentNullException();
        }
    }

    public override string ToString()
    {
        string result = "";
        foreach (Product product in products)
        {
            result += $"{product.ToString()}\n";
        }
        return result;
    }
}
Sergey
  • 125
  • Зачем кастовать null к чему-то чтобы проверить, что это Null или не null? Сначала проверьте, что это null (и выкиньте эксепшн), а вот уже если не Null - тогда и начинайте приводить тип – A K Jul 14 '19 at 14:14
  • @A K♦ Переписал вот так: products[index] = value ?? throw new ArgumentNullException(); но все равно выдает ошибку. – Sergey Jul 14 '19 at 14:27
  • Покажите ваши перегрузки в Products. – A K Jul 14 '19 at 15:03
  • @A K♦ Уже решил проблему, массиву Product[] products; не было присвоено значение, из-за этого и появлялся NullReferenceException, с проверкой на null тоже разобрался. – Sergey Jul 14 '19 at 15:11

1 Answers1

2
if ((object)value != null) products[index] = value;