2012-11-06 35 views
5

xem xét mẫu mã sau đây, nơi Concrete xuất phát từ Base:Loại 'T' không thể được sử dụng như là tham số kiểu trong các loại generic hoặc lỗi phương pháp khi loại được biết đến

Trên dòng tôi đang ở đâu có lỗi biên dịch, tôi đã kiểm tra rằng đối số chung có thể gán cho loại Concrete. Vì vậy, theo lý thuyết tôi tin rằng cần có một cách để tạo ra một thể hiện của lớp Bar.

Có cách nào để tôi có thể xóa lỗi biên dịch không? Tôi không thể nghĩ ra cách để tranh luận.


Toàn văn lỗi biên dịch:

Error 14 The type 'T' cannot be used as type parameter 'T' in the generic type or method 'Bar'. There is no implicit reference conversion from 'T' to 'Concrete'.

+1

Biên dịch đó cho tôi ... là ví dụ * thực tế *? có lẽ các thông số trong mã thực của bạn không? –

+1

Mã của bạn không khớp với thông báo lỗi. Chắc chắn bạn đã viết 'Bar (); ' –

+0

Có lý do nào khiến Foo không có' nơi T: Bê tông'? – Servy

Trả lời

4

Trình biên dịch không có cách nào để biết rằng T, mà hiện nay là hạn chế đối với cơ sở thực sự là bê tông, và rằng ngay cả khi bạn kiểm tra nó trước đây.

Vì vậy:

Type type = typeof(Bar<>); 
Type generic = type.MakeGenericType(typeof(T)); 
var x = Activator.CreateInstance(generic); 

Đừng để nó có cơ hội để làm điều đó.

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