2010-01-16 21 views
75

Có thể đạt được mã sau không? Tôi biết nó không hoạt động, nhưng tôi tự hỏi nếu có một cách giải quyết?Tạo phiên bản loại <T> chung với biến có chứa Loại

Type k = typeof(double); 
List<k> lst = new List<k>(); 
+0

Bit nhầm lẫn bởi nhận xét của bạn "này có thể được thực hiện trong C# 4.0." Nó không thể, ít nhất là không theo cách bạn thể hiện nó. C# 4 vẫn yêu cầu các tham số kiểu generic được xác định tại thời gian biên dịch; bạn vẫn không thể chuyển một biến kiểu như một tham số kiểu chung. – itowlson

+1

Hãy cụm từ mọi thứ như một câu hỏi khi nó là một câu hỏi. Mã như được chỉ định không thể được thực hiện với C# 4.0. –

+1

Câu hỏi tương tự: http://stackoverflow.com/questions/687363/how-do-i-create-a-generic-class-from-a-string-in-c –

Trả lời

112

Vâng, đó là:

var genericListType = typeof(List<>); 
var specificListType = genericListType.MakeGenericType(typeof(double)); 
var list = Activator.CreateInstance(specificListType); 
+0

Tôi nghĩ rằng đây là những gì tôi muốn. Hãy để tôi kiểm tra lại và tôi sẽ đánh dấu bạn là câu trả lời trong giây lát. – Chris

+3

Tôi nghĩ rằng vấn đề chính ở đây là bạn không mô tả những gì bạn muốn * chúng tôi *. Bạn chỉ cho chúng tôi một nỗ lực thất bại tại * một cái gì đó * và sau đó hỏi làm thế nào để thực hiện những gì * bạn muốn *. Nếu bạn muốn câu trả lời, và không đoán, bạn nên mô tả những gì bạn cần làm, thay vì cách bạn đã cố gắng làm điều đó. –

+0

Điều này sẽ hoạt động, cảm ơn. – Chris

3

Một cách sạch có thể sử dụng một phương pháp chung. Đừng cái gì đó như thế này:

static void AddType<T>() 
    where T : DataObject 
{ 
    Indexes.Add(typeof(T), new Dictionary<int, T>()); 
} 
0

Hãy thử điều này:

var genericListType = typeof(List<>); 
var specificListType = genericListType.MakeGenericType(typeof(double)); 
var list = Activator.CreateInstance(specificListType); 
+1

Cảm ơn bạn đã tham gia thời gian để đóng góp một câu trả lời. Đó là vì những người đồng nghiệp hữu ích như chính mình mà chúng ta có thể cùng học hỏi với nhau như một cộng đồng. Dưới đây là một số mẹo về cách làm cho câu trả lời của bạn tuyệt vời: [Làm cách nào để viết câu trả lời hay] (https://stackoverflow.com/help/how-to-answer) – Brien

Các vấn đề liên quan