Tạo một cá thể kiểu Generic <T> với một biến chứa Kiểu


85

Là nó có thể đạt được mã sau đây? Tôi biết nó không hoạt động, nhưng tôi tự hỏi liệu có cách giải quyết nào không?

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

Hơi bối rối trước nhận xét của bạn "điều 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 chung được chỉ định tại thời điểm biên dịch; bạn vẫn không thể chuyển một biến Kiểu làm 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. Không thể hoàn thành mã như đã chỉ định với C # 4.0.
Lasse V. Karlsen


Xin lỗi về điều C # 4.0. Ý tôi là câu trả lời có thể sử dụng các khái niệm trong C # 4.0, không nhất thiết là mã sẽ hoạt động trong C # 4.0. Cảm ơn vì DrJokepu đã chỉnh sửa.
Chris

12
Tôi nghĩ câu hỏi này được phát biểu hoàn hảo - vừa đủ chi tiết!
RunHolt

Câu trả lời:


119

Có, có:

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

Tôi nghĩ đâ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 câu trả lời của bạn trong giây lát.
Chris

3
Tôi nghĩ vấn đề chính ở đây là bạn không mô tả những gì bạn muốn cho chúng tôi . Bạn cho chúng tôi thấy một nỗ lực không thành công trong một việc gì đó và sau đó hỏi làm thế nào để đạt được điều bạn muốn . Nếu bạn muốn có câu trả lời chứ không phải phỏ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 thực hiện.
Lasse V. Karlsen

Về cơ bản tôi muốn tạo một Danh sách <> trong đó kiểu được chỉ định là một biến Kiểu.
Chris

3
Cảm ơn David M, mã của bạn thực hiện chính xác những gì tôi cần. Xin lỗi những người không thể trả lời vì tôi không cung cấp một câu hỏi đầy đủ.
Chris

có thể làm theo cách tương tự đối với các Phương pháp Chung không? tôi cần phải vượt qua các loại động cho phương pháp, tôi đã đăng tải vấn đề của tôi trên dưới liên kết stackoverflow.com/questions/4101784/...
Mathiyazhagan

3

Một cách rõ ràng hơn có thể là sử dụng một phương pháp chung. Làm điều gì đó như sau:

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

Tôi không chắc ý của bạn về "Chỉ mục", đó có phải là một biến được khai báo ở nơi khác không?
jrh 13/12/19
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.