2010-06-21 25 views
10

Nếu có mã sau đây. Nơi bạn thấy XXX tôi muốn đưa vào một mảng kiểu dài [].C# Làm cách nào để xác định từ điển chứa các loại khác nhau?

Tôi làm cách nào để thực hiện việc này và làm cách nào để tìm nạp giá trị từ từ điển? Tôi có sử dụng defaultAmbience ["CountryId"] [0] để lấy phần tử đầu tiên không?

public static Dictionary<string, object> defaultAmbience = new Dictionary<string, object> 
{ 
    { "UserId", "99999" }, 
    { "CountryId", XXX }, 
    { "NameDefaultText", "nametext" }, 
    { "NameCulture", "it-IT" }, 
    { "NameText", "namelangtext" }, 
    { "DescriptionDefaultText", "desctext" }, 
    { "DescriptionCulture", "it-IT" }, 
    { "DescriptionText", "desclangtext" }, 
    { "CheckInUsed", "" } 
}; 
+7

Bạn đã thử mã của mình chưa? –

+2

Có lẽ bạn nên sử dụng một lớp hoặc một cấu trúc. – mbillard

+0

Bạn đang xử lý dữ liệu ldap hoặc ldif perchance? – Jubal

Trả lời

8

Đầu Tắt:

Nếu bạn không biết loại giá trị HOẶC phím, sau đó không sử dụng từ điển Chung.

.NET Generics phù hợp nhất khi bạn biết các loại trước thời hạn. .NET cũng cung cấp một bộ sưu tập toàn bộ để sử dụng khi bạn muốn lưu trữ một "túi hỗn hợp" của các đối tượng thuộc các kiểu khác nhau.

Trong trường hợp này, tương đương với Từ điển sẽ là HashTable.

Kiểm tra không gian tên System.Collections (thay vì System.Collections.Generic) để xem phần còn lại của các tùy chọn bạn có.

Nếu bạn biết loại khóa, thì điều bạn đang làm là đúng cách.

Thứ hai:

Khi bạn truy xuất giá trị ... bạn sẽ cần phải cast đối tượng trở ra để loại ban đầu của mình:

long[] countryIds = (long[]) defaultAmbience["CountryId"]; 

hoặc

// To get the first value 
long id = ((long[])defaultAmbience["CountryId"])[0]; 
+6

Sử dụng các loại không chung chung sẽ không giúp ích gì ở đây - anh ấy vẫn cần phải thực hiện việc truyền… Và anh ấy biết rằng các khóa sẽ là chuỗi, vì vậy anh ấy thực sự nhận được một số lợi ích từ việc sử dụng các phiên bản chung. – Grzenio

+3

Có gì sai với 'Dictionary '? Đối với tôi, điều đó cho thấy rõ ràng hơn là mục đích lưu trữ các mục hỗn hợp. Bên cạnh đó, nó ngăn bạn không cố sử dụng khóa không phải chuỗi (xem thêm http://stackoverflow.com/questions/1433713/which-collection-class-to-use-hashtable-or-dictionary/1433736#1433736) –

+0

@ 0xA3 - Không có gì. Tôi đã cập nhật câu trả lời của mình. Những gì anh ta làm bây giờ là tốt miễn là anh ta biết loại chìa khóa. –

2

Bạn cần cung cấp dàn diễn viên nơi bạn gọi nó.

((long[])defaultAmbience["countryID"])[0]; 
1

Trong trường hợp này C# không thực sự biết bạn mong đợi loại gì, vì vậy bạn phải nhập đúng loại sau khi lấy từ từ điển và trước khi sử dụng. Trong trường hợp mảng dài này sẽ là:

((long[])defaultAmbience["CountryId"])[0] 
Các vấn đề liên quan