如何用反射实现如下的泛型方法调用?
1. 代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace GenericReflectingApp1
{
class Program
{
static void Main(string[] args)
{
myGeneric<string> myString = new myGeneric<string>();
myString.Show<int>(100);
ShowTypeInfo(myString.GetType());
//出现错误,"发现不明确的匹配。",
//MethodInfo myMethod = myString.GetType().GetMethod("Show");
//如何指定泛型方法参数
//MethodInfo myMethod = myString.GetType().GetMethod("Show", new Type[] { });
//Console.WriteLine (string.Format ("Is Generic Method:{0}", myMethod .IsGenericMethod.ToString ()));
Console.Read();
}
static void ShowTypeInfo(Type t)
{
Console.WriteLine(string.Format("TypeName:{0} Method List:", t.Name));
foreach (MethodInfo obj in t.GetMethods())
{
Console.WriteLine(string.Format("Method Name:{0};IsGeneric Method:{1} ;ContainsGenericParameters:{2} ",
obj.Name, obj.IsGenericMethod.ToString(),obj.ContainsGenericParameters.ToString()));
if (obj.GetGenericArguments().Count() > 0)
{
Console.WriteLine(string.Format("Generic Arguments 's count:{0}", obj.GetGenericArguments()[0].Name
));
}
}
}
}
class myGeneric<T>
{
public void Show<U>(U u)
{
Console.WriteLine(u.ToString());
}
public void Show(T t)
{
Console.WriteLine(t.ToString());
}
}
}
2. 如何通过反射找到泛型方法 Show<U>(U u) MethodInfo。