Правильный способ инициализации словаря С# со значениями?

Я создаю словарь в файле С# со следующим кодом:

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