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

334

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

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.

  • 2
    Измените целевую версию фреймворка или используйте «старый» способ инициализации.
  • 0
    В каком контексте вы размещаете этот код? Файл .cs который компилируется Visual Studio, или в .cshtml ? Есть ли в вашем проекте элемент languageVersion ?
Показать ещё 1 комментарий
Теги:
dictionary

5 ответов

612
Лучший ответ

Я не могу воспроизвести эту проблему в простом консольном приложении .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, которая поддерживает синтаксис инициализации.

  • 7
    Проблема заключается в версии C #, которую использует OP, инициализаторы объекта / коллекции не были представлены до C # 3.0. Подробно о том, почему это не сработало раньше, уже дан ответ .
  • 0
    @James - отредактировано, чтобы указать как таковое.
Показать ещё 4 комментария
159

С С# 6.0 вы можете создать словарь следующим образом:

var dict = new Dictionary<string, int>
{
    ["one"] = 1,
    ["two"] = 2,
    ["three"] = 3
};

Это даже работает с пользовательскими типами.

  • 6
    Для людей, больше интересующихся этим новым синтаксисом, есть хорошее сообщение в блоге: marcin-chwedczuk.github.io/…
  • 1
    Это идеально подходит для встроенного объявления.
Показать ещё 2 комментария
28

Вы можете инициализировать 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 для деталей.

13

Предположим, у нас есть такой словарь

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" }
};
9

Инициализаторы объектов были введены в С# 3.0, проверьте, какую версию рамки вы планируете.

Обзор С# 3.0

Ещё вопросы

Сообщество Overcoder
Наверх
Меню