Cách thích hợp để khởi tạo từ điển C # với các giá trị?


513

Tôi đang tạo một từ điển trong tệp C # với mã sau:

private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT
        = new Dictionary<string, XlFileFormat>
        {
            {"csv", XlFileFormat.xlCSV},
            {"html", XlFileFormat.xlHtml}
        };

Có một dòng màu đỏ newvới lỗi:

Không thể sử dụng tính năng 'bộ khởi tạo bộ sưu tập' vì nó không phải là một phần của đặc tả ngôn ngữ ISO-2 C #

Bất cứ ai có thể giải thích những gì đang xảy ra ở đây?

EDIT: okay, vậy hóa ra tôi đã sử dụng .NET phiên bản 2.


3
Thay đổi phiên bản khung được nhắm mục tiêu hoặc sử dụng cách khởi tạo "cũ".
Sebastian Ðymel

Trong bối cảnh nào bạn đặt mã này? Một .cstệp được biên dịch bởi Visual Studio, hoặc trong một .cshtml? Tập tin dự ánlanguageVersion của bạn có một yếu tố ?
CodeCaster

Câu trả lời:


826

Tôi không thể tái tạo vấn đề này trong một ứng dụng bảng điều khiển .NET 4.0 đơn giản:

static class Program
{
    static void Main(string[] args)
    {
        var myDict = new Dictionary<string, string>
        {
            { "key1", "value1" },
            { "key2", "value2" }
        };

        Console.ReadKey();
    }
}

Bạn có thể thử tái tạo nó trong một ứng dụng Console đơn giản và đi từ đó không? Có vẻ như bạn đang nhắm mục tiêu .NET 2.0 (không hỗ trợ nó) hoặc khung hồ sơ khách hàng, thay vì phiên bản .NET hỗ trợ cú pháp khởi tạo.


11
Vấn đề là phiên bản C # mà OP đang sử dụng, bộ khởi tạo đối tượng / bộ sưu tập không được giới thiệu cho đến khi C # 3.0. Chi tiết về lý do tại sao nó không hoạt động trước đây đã được trả lời .
James

@James - Đã chỉnh sửa để chỉ ra như vậy.
Haney

Làm cách nào để kiểm tra phiên bản C # tôi đang sử dụng hoặc thay đổi nó?
azrosen92

3
Các thuộc tính của dự án sẽ chỉ ra phiên bản đích của khung.
Haney

2
@James - Tuy nhiên, không đáng tin cậy, vì người này có thể đang chọn một số công việc kế thừa trong một giải pháp nhắm mục tiêu 2.0 và không biết về nó, ví dụ.
Haney

198

Với C # 6.0, bạn có thể tạo một từ điển theo cách sau:

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

Nó thậm chí hoạt động với các loại tùy chỉnh.


8
Đối với những người quan tâm hơn đến cú pháp mới này, đây là một bài đăng blog hay: marcin-chwedczuk.github.io/ mẹo
csharpfolk

1
Điều này là hoàn hảo để khai báo nội tuyến.
Tiramonium

1
Nice - không biết cách viết tắt này. Trông hơi giống Python)) Cảm ơn bạn!
Mikhail T.

Tôi thích cách của bạn cá cược hơn, nhưng hãy lưu ý rằng nó sử dụng chính xác số ký tự "nồi hơi" trên mỗi dòng (4) làm câu trả lời được chấp nhận với {"key2", "value2"},
Maxter

35

Bạn có thể khởi tạo một Dictionary(và các bộ sưu tập khác) nội tuyến. Mỗi thành viên được chứa trong niềng răng:

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

Xem MSDN để biết chi tiết.


21

Giả sử chúng ta có một từ điển như thế này

Dictionary<int,string> dict = new Dictionary<int, string>();
dict.Add(1, "Mohan");
dict.Add(2, "Kishor");
dict.Add(3, "Pankaj");
dict.Add(4, "Jeetu");

Chúng ta có thể khởi tạo nó như sau.

Dictionary<int, string> dict = new Dictionary<int, string>  
{
    { 1, "Mohan" },
    { 2, "Kishor" },
    { 3, "Pankaj" },
    { 4, "Jeetu" }
};

Câu trả lời ReSharper.
Gian hàng Antony


0

với c # 6.0

static class Program
{
    static void Main(string[] args)
    {
        var myDict = new Dictionary<string, string>
        {
           ["Key1"]="Value1",
           ["Key2"]="Value2"
        };

        Console.ReadKey();
    }
}

3
Điều này đã được trả lời. Không thêm bất cứ điều gì mới.
nawfal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.