Чтобы обеспечить возвращение дефолтного значения из словаря при обращении к несуществующему ключу, вам нужно воспользоваться методом TryGetValue вместо прямого обращения к ключу. Метод TryGetValue позволяет безопасно попытаться получить значение по ключу, и если ключ не найден, возвращает заранее определенное дефолтное значение.
Пример с использованием TryGetValue:
using System;
using System.Collections.Generic;
using System.ComponentModel;
public enum IncomeType
{
[Description("Зарплата")]
Salary,
[Description("Инвестиция")]
Investment,
[Description("Аренда")]
Rental,
[Description("Другое")]
Other
}
class Program
{
static void Main()
{
Dictionary incomeCategories = new Dictionary
{
{"salary", IncomeType.Salary},
{"investment", IncomeType.Investment},
{"rental", IncomeType.Rental},
{"other", IncomeType.Other},
{"зарплата", IncomeType.Salary},
{"инвестиции", IncomeType.Investment},
{"аренда", IncomeType.Rental},
{"другой", IncomeType.Other},
};
Console.WriteLine("Введите тип дохода (Зарплата, Инвестиция, Аренда, Другой)");
string input = Console.ReadLine().ToLower();
// Используем TryGetValue для безопасного получения значения
if (incomeCategories.TryGetValue(input, out IncomeType incomeType))
{
// Делаем что-то с incomeType, если ключ найден
Console.WriteLine($"Выбран тип дохода: {incomeType}");
}
else
{
// Если ключ не найден, используем дефолтное значение
incomeType = IncomeType.Other;
Console.WriteLine($"Тип дохода не распознан. Используется дефолтное значение: {incomeType}");
}
}
}
В этом примере TryGetValue проверяет, существует ли ключ в словаре. Если да, то значение, ассоциированное с ключом, присваивается переменной incomeType, и выполняется соответствующий код. Если ключ не найден, используется заранее определенное дефолтное значение, в данном случае IncomeType.Other. Таким образом, использование TryGetValue позволяет избежать исключений при обращении к несуществующим ключам и обеспечивает гибкое управление дефолтными значениями.
public enum IncomeType
{
[Description("Зарплата")]
Salary,
[Description("Инвестиция")]
Investment,
[Description("Аренда")]
Rental,
[Description("Другое")]
Other
}
Dictionary<string, IncomeType> incomeCategories = new Dictionary<string, IncomeType>
{
{"salary", IncomeType.Salary},
{"investment", IncomeType.Investment},
{"rental", IncomeType.Rental},
{"other", IncomeType.Other},
{"зарплата", IncomeType.Salary},
{"инвестиции", IncomeType.Investment},
{"аренда", IncomeType.Rental},
{"другой", IncomeType.Other},
{default, IncomeType.Other} //вот в этом моменте ошибка
};
Console.WriteLine("Введите тип дохода (Зарплата, Инвестиция, Аренда, Другой)");
IncomeType = incomeCategories[Console.ReadLine().ToLower()];
Как можно реализовать по другому эту идею?