Phương pháp chung là ...C#: Nhận tham số kiểu trong thời gian chạy để vượt qua thành một phương pháp Generic
public void PrintGeneric2<T>(T test) where T : ITest
{
Console.WriteLine("Generic : " + test.myvar);
}
Tôi gọi này từ Main() ...
Type t = test2.GetType();
PrintGeneric2<t>(test2);
tôi nhận lỗi "CS0246: không thể tìm thấy loại hoặc tên không gian tên 't'" và "CS1502: tốt nhất phương thức quá tải phù hợp DoSomethingClass.PrintGeneric2 < t> (T) có đối số không hợp lệ"
điều này liên quan đến câu hỏi trước của tôi đây : C# : Passing a Generic Object
Tôi đã đọc rằng loại chung không thể được xác định trong thời gian chạy, mà không sử dụng phản ánh hoặc methodinfo, nhưng tôi không rõ ràng về cách thực hiện trong trường hợp này.
Cảm ơn nếu bạn có thể soi sáng cho tôi =)
đề xuất của bạn sẽ buộc trình biên dịch suy ra T là System.Type. Tôi không nghĩ rằng điều đó sẽ phản ánh đúng ý định OP của việc vượt qua một thời gian chạy được đánh giá loại –
@AZ, không, nó sẽ không. Bỏ qua phần 'Type t = test2.GetType()' hoàn toàn, không cần thiết ở đây. 'test2' thực hiện' ITest' (xem câu hỏi trước của anh). Thông qua 'test2' as-is, là đủ ở đây. –
Đủ công bằng. Đã không kiểm tra các câu hỏi khác vì vậy tôi đã thiếu bối cảnh của test2. Tôi vẫn đứng trước giả định rằng OP muốn giải quyết T một cách tự động vào thời gian chạy bằng cách nào đó và đó không phải là những gì generics dành cho –