tôi có phương pháp này:Làm cách nào để gọi một phương thức chung nếu bạn chỉ biết tham số kiểu khi chạy?
public List<T> SomeMethod<T>(params) where T : new()
Vì vậy, tôi muốn gọi SomeMethod
này đó là tốt nếu tôi biết loại:
SomeMethod<Class1>();
Nhưng nếu tôi chỉ có Class1
khi chạy Tôi không thể gọi nó đi?
Vậy làm thế nào để gọi SomeMethod
với loại T không xác định? Tôi đã gõ bằng cách sử dụng sự phản chiếu.
Tôi có Loại loại nhưng SomeMethod<Type | GetType()>
không hoạt động.
Cập nhật 7. tháng:
Dưới đây là một số mẫu mã của những gì tôi muốn đạt được:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication63
{
public class DummyClass
{
}
public class Class1
{
public string Name;
}
class AssemblyTypesReflection
{
static void Main(string[] args)
{
object obj = new Class1() { Name = "John" } ;
Assembly assembly = Assembly.GetExecutingAssembly();
var AsmClass1 = (from i in assembly.GetTypes() where i.Name == "Class1" select i).FirstOrDefault();
var list = SomeMethod<AsmClass1>((AsmClass1)obj); //Here it fails
}
static List<T> SomeMethod<T>(T obj) where T : new()
{
return new List<T> { obj };
}
}
}
Đây là một bản demo đưa ra khỏi một bối cảnh lớn hơn.
SLaks đã trả lời câu hỏi của bạn tốt. Tôi chỉ chú ý đến bạn rằng bạn đã lạm dụng từ ngữ 'ẩn danh' ở đây, có nghĩa là điều gì đó khác biệt. Trong trường hợp của bạn, T là chung chung. – SimpleVar
Đây có phải là cuộc gọi API của bạn hoặc API của bên thứ ba không? Nếu nó là của bạn thì hãy xem xét thay đổi nó, bởi vì generics không giải quyết vấn đề nhưng tạo ra nó trong trường hợp này. – empi
có thể trùng lặp của [Gọi phương thức chung với một đối số kiểu chỉ được biết đến tại thời điểm thực hiện] (http://stackoverflow.com/questions/325156/calling-generic-method-with-a-type-argument-known-only-at -execution-time) – user7116