Chỉnh sửa:Gọi phương pháp chung với một đối số kiểu chỉ được biết tại thời điểm thực hiện
Tất nhiên mã thực sự của tôi không giống chính xác như thế này. Tôi đã cố gắng viết mã bán giả để làm cho nó rõ ràng hơn khi tôi muốn làm.
Dường như nó chỉ là những thứ sai lầm.
Vì vậy, những gì tôi thực sự muốn làm là thế này:
Method<Interface1>();
Method<Interface2>();
Method<Interface3>();
...
Vâng ... Tôi nghĩ rằng có lẽ tôi có thể biến nó thành một vòng lặp sử dụng phản ánh. Vì vậy, câu hỏi là: Làm thế nào để tôi làm điều đó. Tôi có rất kiến thức nông phản ánh. Vì vậy, ví dụ mã sẽ là tuyệt vời.
Kịch bản trông như thế này:
public void Method<T>() where T : class
{}
public void AnotherMethod()
{
Assembly assembly = Assembly.GetExecutingAssembly();
var interfaces = from i in assembly.GetTypes()
where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
select i;
foreach(var i in interfaces)
{
Method<i>(); // Get compile error here!
}
Original post:
Hi!
Tôi đang cố gắng để lặp qua tất cả các giao diện trong một không gian tên và gửi chúng dưới dạng đối số cho một phương pháp chung chung như thế này:
public void Method<T>() where T : class
{}
public void AnotherMethod()
{
Assembly assembly = Assembly.GetExecutingAssembly();
var interfaces = from i in assembly.GetTypes()
where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
select i;
foreach(var interface in interfaces)
{
Method<interface>(); // Get compile error here!
}
}
Các lỗi tôi nhận được là "Loại tên dự kiến, nhưng tên biến địa phương tìm thấy ". Nếu tôi cố gắng
...
foreach(var interface in interfaces)
{
Method<interface.MakeGenericType()>(); // Still get compile error here!
}
}
tôi nhận được "Không thể áp dụng điều hành '<' để toán hạng của loại 'phương pháp nhóm' và 'System.Type" Bất kỳ ý tưởng về làm thế nào để có được xung quanh vấn đề này?
Tôi muốn viết phương pháp chung, dựa trên loại. Nhưng nếu tôi làm cho nó bằng cách sử dụng sự phản ánh, và sau đó stub tạo ra một, nó hiểu nó sẽ không stub những gì tôi muốn. Tôi đoán là điều đó là không thể? Hoặc là nó? Viết phương thức chung cho tất cả các loại trong danh sách ... –
@Stephane: Thật khó để biết chính xác những gì bạn đang cố gắng làm. Tôi đề nghị bạn hỏi một câu hỏi mới với nhiều chi tiết hơn. –
Lưu ý rằng bạn có thể nhận được "Kết hợp không rõ ràng trong phương pháp phân giải" trên 'GetMethod()'. Điều này xảy ra khi phương pháp bạn đang cố gắng có được một số tình trạng quá tải. Vì vậy, bạn cần xác định cái nào bạn muốn bằng cách sử dụng 'GetMethod (" Name ", new Type [] {arguments})' – cvsguimaraes