2014-07-19 15 views
5

Tôi có thể tạo một từ điển, nơi mà loại khóa là một loại chung?Tôi có thể sử dụng chung chung làm chìa khóa không?

ví dụ:

void addKey<T>(object value) 
{ 
    dic.add(T, value); 
} 
+3

'typeof (T) 'sẽ nhận được một' Type' đại diện cho 'T'. –

+0

Cảm ơn ta.speot. Cùng một dòng tương tự, tôi có thể vượt qua lớp như một tham số không? Thay vì truyền một thể hiện của lớp như một tham số? – Ginger

+1

@Ginger bạn có thể truyền một lớp của lớp 'Loại', bạn có thể sử dụng phương thức' typeof' –

Trả lời

3

Còn về?

void AddKey<T>(T value) 
{ 
    dic.Add(typeof(T), value); 
} 

Cách sử dụng:

// the type of value is automatically detected based on usage 
AddKey("sampleString"); 

Bạn có thể vượt qua loại exlicity tất nhiên:

AddKey<BaseClass>(derriveredInstance); 

Sau đó, từ điển là loại Dictionary<Type, object>

Hạn chế: Bạn không thể vượt qua insta nce của khác (không căn cứ hoặc không giống nhau) lớp như chính:

AddKey<int>("some string"); // compile time error 

Nếu bạn muốn đạt được một cái gì đó như thế này, bạn nên có một cái nhìn tại câu trả lời khác và vượt qua Type hoặc vượt qua object as type có giá trị.

1

Chỉ cần để tổng hợp các ý kiến:

Dictionary<Type, object> dic = new Dictionary<Type, object>(); 

void AddKey(Type key,object value) 
{ 
    dic.Add(key, value); 
} 

và bạn có thể sử dụng nó như thế này:

AddKey(typeof(string), new Object()); 
Các vấn đề liên quan