以非泛型方式调用泛型方法(一)
public static void Add<T>(T obj, IList<T> list)
{
list.Add(obj);
}
Add(Type type, object obj, object list);
void Add(Type type, object obj, object list)
{
MethodInfo mi = typeof(MyType).GetMethod("Add");
MethodInfo gmi = mi.MakeGenericMethod(type);
gmi.Invoke(new object[] { obj, list });
}
public delegate void GM<T>(T obj, IList<T> list);
interface ING
{
void NGM(object obj, object list);
}
public class GClass<T> : ING
{
private GM<T> m_gmd;
public GClass(GM<T> gmd)
{
m_gmd = gmd;
}
INGClass 成员
}
static ING GetNGC(Type genericType, Type methodType, string methodName)
{
MethodInfo mi = methodType.GetMethod(methodName);
MethodInfo gmi = mi.MakeGenericMethod(genericType);
Delegate gmd = Delegate.CreateDelegate(typeof(GM<>).MakeGenericType(genericType), gmi);
return Activator.CreateInstance(typeof(GClass<>).MakeGenericType(genericType), gmd) as ING;
}
ING ng = GetNGC(typeof(int), typeof(MyType), "Add");
ng.NGM(i, list);本文出自 “孤独行者” 博客,请务必保留此出处http://kanas.blog.51cto.com/1355772/285942
原来还有(二)
感觉这个方案不是很简洁 不过还是不错的