Правильный способ инициализации словаря С# со значениями?
Я создаю словарь в файле С# со следующим кодом:
private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT
= new Dictionary<string, XlFileFormat>
{
{"csv", XlFileFormat.xlCSV},
{"html", XlFileFormat.xlHtml}
};
В new
есть красная строка с ошибкой:
Функция "initilializer коллекции" не может использоваться, потому что она не является частью спецификации языка ISO-2 С#
Может ли кто-нибудь объяснить, что здесь происходит?
EDIT: в порядке, так что получается, что я использовал .NET версию 2.
Ответы
Ответ 1
Я не могу воспроизвести эту проблему в простом консольном приложении .NET 4.0:
static class Program
{
static void Main(string[] args)
{
var myDict = new Dictionary<string, string>
{
{ "key1", "value1" },
{ "key2", "value2" }
};
Console.ReadKey();
}
}
Можете ли вы попытаться воспроизвести его в простом консольном приложении и перейти оттуда? Вполне вероятно, что вы нацеливаетесь на .NET 2.0 (которая не поддерживает его) или на структуру профиля клиента, а не на версию .NET, которая поддерживает синтаксис инициализации.
Ответ 2
С С# 6.0 вы можете создать словарь следующим образом:
var dict = new Dictionary<string, int>
{
["one"] = 1,
["two"] = 2,
["three"] = 3
};
Это даже работает с пользовательскими типами.
Ответ 3
Вы можете инициализировать Dictionary
(и другие коллекции) встроенным. Каждый член содержит скобки:
Dictionary<int, StudentName> students = new Dictionary<int, StudentName>
{
{ 111, new StudentName { FirstName = "Sachin", LastName = "Karnik", ID = 211 } },
{ 112, new StudentName { FirstName = "Dina", LastName = "Salimzianova", ID = 317 } },
{ 113, new StudentName { FirstName = "Andy", LastName = "Ruth", ID = 198 } }
};
Посмотрите MSDN для деталей.
Ответ 4
Предположим, у нас есть такой словарь
Dictionary<int,string> dict = new Dictionary<int, string>();
dict.Add(1, "Mohan");
dict.Add(2, "Kishor");
dict.Add(3, "Pankaj");
dict.Add(4, "Jeetu");
Мы можем инициализировать его следующим образом.
Dictionary<int, string> dict = new Dictionary<int, string>
{
{ 1, "Mohan" },
{ 2, "Kishor" },
{ 3, "Pankaj" },
{ 4, "Jeetu" }
};
Ответ 5
Инициализаторы объектов были введены в С# 3.0, проверьте, какую версию рамки вы планируете.
Обзор С# 3.0