2012-06-12 32 views
16

Tôi có lớp City sau. Mỗi đối tượng thành phố chứa một từ điển mà các khóa là các thẻ ngôn ngữ (ví dụ: "EN", "DE", "FR" ...) và các giá trị nào là tên thành phố bằng các ngôn ngữ tương ứng (ví dụ: Rome/Rom, v.v.) .Thêm giá trị vào từ điển thông qua khởi tạo nội tuyến vùng chứa

public class City: 
{ 
    private IDictionary<string, string> localizedNames = new Dictionary<string, string>(0); 
    public virtual IDictionary<string, string> Names 
    { 
    get { return localizedNames ; } 
    set { localizedNames = value; } 
    } 
} 

Hầu hết các thành phố có cùng tên bất cứ ngôn ngữ để các nhà xây dựng City không thực sự tạo ra các bản đồ tiếng Anh:

public City(string cityName) 
    { 
    this.LocalizedNames.Add("EN", cityName); 
    } 

Ở đây có câu hỏi: là có một cách để thêm giá trị khác thông qua khởi tạo nội tuyến?

tôi đã cố gắng biến thể khác nhau trong các cách sau nhưng không thành công ngữ nghĩa (không biên dịch):

AllCities.Add(new City("Rome") { Names["DE"] = "Rom" }; 

Tôi cũng đã cố gắng tạo ra một từ điển mới, nhưng điều này rõ ràng là ghi đè "EN" tham số:

AllCities.Add(new City("Rome") { Names = new Dictionary<string, string>() { { "DE", "Rom" } } }; 

Bất kỳ ai biết nếu điều này là có thể?

+0

Lưu ý: * constructor khởi tạo * không phải là thuật ngữ thích hợp. Suy nghĩ ** đối tượng ** và ** bộ sưu tập ** khởi tạo, không ai trong số đó được thực hiện thông qua một hàm tạo. –

+0

bạn đã đúng, tôi đã chỉnh sửa tiêu đề, nhờ –

Trả lời

16
AllCities.Add(new City("Rome") { Names = { { "DE", "Rom" }, { "...", "..." } } }); 

Điều này đang sử dụng cú pháp khởi tạo để gọi phương thức .Add.

+0

Điều này sẽ ghi đè lên giá trị được thêm vào trong hàm tạo, giống như khối mã cuối cùng do người hỏi cung cấp. – Rawling

+3

Không, không. Nó sẽ thêm vào từ điển hiện có. Nó sẽ không tạo ra một cái mới. – usr

+0

... Bạn đã cho tôi, tôi đã không thử nó. Hãy cho tôi một giây. Nếu bạn đúng, tôi sẽ xin lỗi một cách khiêm nhường. – Rawling

6

đây là thực tế intialization inline:

private IDictionary<string, string> localizedNames = new Dictionary<string, string>{ 
    {"key1","value1"}, 
    {"key2","value2"} 
}; 
Các vấn đề liên quan