Чтобы справиться с элементами, которые еще не существуют в словаре мой лично предпочтительным способом является использование TryGetValue
:
int stock;
inventory.TryGetValue(product, out stock);
inventory[product] = stock + 1;
Это работает, потому что TryGetValue
наборы stock
к default(int)
, который 0
, если продукт еще не существует. 0
- это именно то значение, которое вы хотите.
Если вы предпочитаете рассматривать значение stock
как Unassigned после TryGetValue
возвращает false
(для удобства чтения), то вы можете использовать этот же общий подход:
int stock;
if (!inventory.TryGetValue(product, out stock))
stock = 0;
inventory[product] = stock + 1;
Что о предмете, который не был еще в наличии? Это существует в вашем словаре со значением нуля или отсутствует в вашем словаре? Текущий ответ предполагает, что он уже существует. – hvd
@hvd действительная точка, возможно, что продукт не существует в словаре. –
Будьте осторожны с использованием продукта в качестве ключа в словаре. По умолчанию для классов используется ссылочное равенство. Если один продукт всегда представлен одним и тем же экземпляром класса (объектом), это нормально. В противном случае используйте идентификатор продукта в качестве ключа или переопределите 'Equals' и' GetHashcode' для класса. –