2013-06-11 16 views
270

tôi đang tạo ra một từ điển trong một file C# với đoạn mã sau:Cách thích hợp để khởi tạo từ điển C# với các giá trị đã có trong đó?

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 đỏ dưới new với lỗi:

Feature 'collection initilializer' cannot be used because it is not part of the ISO-2 C# language specification

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

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

+0

Bạn có sử dụng Mono không? – Artemix

+0

Ít nhất hoạt động trong .Net 4.5. – wonko79

+0

Bạn đang sử dụng .NET nào? Tôi nghĩ rằng nó sẽ hoạt động trên 3.0 và hơn thế nữa ... – Andrew

Trả lời

452

Tôi không thể tạo lại vấn đề này trong .NET 4.0 ứng dụng giao diện điều khiển đơn giản:

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

     Console.ReadKey(); 
    } 
} 

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

+7

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 C# 3.0. Chi tiết về lý do tại sao nó không hoạt động trước khi đã được [trả lời] (http://stackoverflow.com/questions/459652/why-do-c-sharp-collection-initializers-work-this-way). – James

+0

@James - Được chỉnh sửa để biểu thị như vậy. – Haney

+0

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

7

Trình khởi tạo đối tượng được giới thiệu trong C# 3.0, kiểm tra phiên bản khung mà bạn đang nhắm mục tiêu.

Overview of C# 3.0

102

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

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

Nó thậm chí làm việc với các loại tùy chỉnh.

+3

Đối với những người quan tâm đến cú pháp mới này, đây là bài đăng trên blog tốt: https://marcin-chwedczuk.github.io/object-and-collection-initializers-in-csharp – csharpfolk

+0

Điều này hoàn hảo cho việc khai báo nội tuyến. – Tiramonium

+0

Đẹp - không biết cách viết tắt này. Trông giống như Python)) Cảm ơn bạn! –

18

Bạn có thể khởi tạo Dictionary (và các bộ sưu tập khác) nội tuyến. Mỗi thành viên được chứa dấu ngoặc đơn:

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.

6

Giả sử chúng ta có một cuốn 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ác vấn đề liên quan