У меня есть словарь со значением типа integer. Когда я заполняю свой класс одним из свойств типа Nullable<int>
, я хочу заполнить это свойство значением из словаря на основе заданного идентификатора продукта.
Как я могу получить обнуляемый тип, когда нет соответствующие значения для данного идентификатора продукта?
public class OrderLine
{
public int? AvailableQuantity { get; set; }
}
var selectedProductId = Guid.NewGuid();
var products = new Dictionary<Guid, int>
{
{ Guid.NewGuid(), 1 },
{ Guid.NewGuid(), 2 },
{ Guid.NewGuid(), 3 },
};
var result = new OrderLine
{
Id = Guid.NewGuid(),
ProductId = selectedProductId,
AvailableQuantity = products.GetValueOrDefault(selectedProductId, default)
};
Подход, приведенный выше, возвращает 0
вместо null
И компилятор не может скомпилироваться при попытке
AvailableQuantity = products.GetValueOrDefault(selectedProductId, default(int?))
Аргументы типа для метода 'TValue System.Collections.Generi c .CollectionExtensions.GetValueOrDefault (this IReadOnlyDictionary, TKey, TValue)' не могут быть выведены из использования. Попробуйте явно указать аргументы типа.
Я не могу изменить тип словаря. Словарь - это возвращаемый тип широко используемого метода. Это первый случай, когда нам нужно разобраться со сценарием, в котором идентификатор продукта не может быть в этом словаре.
Я бы не хотел перечислять словарь, чтобы изменить его тип на nullable