2010-10-18 30 views
26

Tôi có một phương pháp chunggọi method generic với Loại biến

Foo<T> 

Tôi có một loại biến bar

Có thể đạt được một cái gì đó giống như Foo<bar>

Visual studio đang mong đợi một loại hoặc không gian tên tại quầy bar.

Kindness,

Dan

+0

Bạn có thể hiển thị một số mã mà bạn đang cố gắng sử dụng không? Nó chắc chắn có thể, do đó, nó có thể là một lỗi cú pháp. – RPM1984

Trả lời

34

Cho phép giả định rằng Foo được khai báo trong class Test như

public class Test 
{ 
    public void Foo<T>() { ... } 

} 

Bạn cần phải đầu tiên khởi tạo phương thức cho loại bar sử dụng MakeGenericMethod. Và sau đó gọi nó bằng cách sử dụng sự phản chiếu.

var mi = typeof(Test).GetMethod("Foo"); 
var fooRef = mi.MakeGenericMethod(bar); 
fooRef.Invoke(new Test(), null); 
+0

Cảm ơn lòng ... chỉ là những gì tôi cần! –

3

bạn có thể làm cho loại hình này bởi

typeof(Foo<>).MakeGenericType(bar); 
20

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn đã, trong bản chất, các loại sau đây định nghĩa:

public class Qaz 
{ 
    public void Foo<T>(T item) 
    { 
     Console.WriteLine(typeof(T).Name); 
    } 
} 

public class Bar { } 

Bây giờ, đưa cho bạn có một biến bar định nghĩa như vậy:

var bar = typeof(Bar); 

Sau đó, bạn muốn có thể gọi Foo<T>, thay thế T bằng biến thể hiện của bạn bar.

Đây là cách:

// Get the generic method `Foo` 
var fooMethod = typeof(Qaz).GetMethod("Foo"); 

// Make the non-generic method via the `MakeGenericMethod` reflection call. 
// Yes - this is confusing Microsoft!! 
var fooOfBarMethod = fooMethod.MakeGenericMethod(new[] { bar }); 

// Invoke the method just like a normal method. 
fooOfBarMethod.Invoke(new Qaz(), new object[] { new Bar() }); 

Thưởng thức!

+0

+1 ... chỉ một chút sau khi được chấp nhận trả lời nhưng tuyệt vời đưa! –

+3

@ 'Daniel Elliot' - Vâng, tôi biết - 41 giây sau. Tôi đã hy vọng rằng câu trả lời chi tiết hơn một chút của tôi sẽ thắng thế, nhưng than ôi. ;-) – Enigmativity

+0

mã của tôi có được công việc, câu trả lời chi tiết nhất .... Cảm ơn –

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