如何用反射实现如下的泛型方法调用?

 

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

posted @ 2009-09-26 22:16  b0b0  阅读(3582)  评论(13编辑  收藏  举报