反射~            MethodInfo mi = this.GetType().GetMethod("DoSth", BindingFlags.Instance| BindingFlags.Public);
            mi = mi.MakeGenericMethod(你知道的类型Type实例);
            object ret=mi.Invoke(this, new object[] { 要传入的那个T型参数});
ret就是返回值

解决方案 »

  1.   

    直接DoSth("hello")就可以了,编译器能判断出泛型参数的类型
      

  2.   

    不好意思 ,我没表达明白。我的意思是如果我 定义了一个实体类,比如,
    namespace My.namespace 
    public class user
    {
       public ID{get;set;}
       public Name{get;set;}
    }
    我现在只有一个实体类的实例info,和这个实体类的TYPE字符串"My.namespace.user",那么我该怎么调用那个方法?
    Type type=Type.GetType("My.namespace.user");
    DoSth <type>(info); 
    这个样好像报错。
      

  3.   

    switch( type){
      case "string":
       DoSth<string>("hello");
      break;
    }
      

  4.   

    估计你这类型是动态的,使用case做判断吧。
      

  5.   


    直接DoSth <user>(info);不行么?
      

  6.   

    问题是,类型是动态确定的,而不是user这个固定的。lz的问题是想要在运行时确定范型类型,这个与范型的本意(静态确定类型以提供静态类型检查)相距甚远,这个在现在或者是以后都不可能被范型支持,就好像你想让一个男的生小孩一样,by design就是不行的。
      

  7.   

    那样的话,要么通过反射调用,要么实现一个非泛型的版本
    比如IList<T>和IList
      

  8.   

    1. user类 继承一个父类...或者接口
    2.只能判断了
    if(info.GetType() == typeof(user))
    {
      DoSth <user>(info); //这样做达不到泛型方法的目的了...
    }
      

  9.   


      public interface IPerson
      {
        string Name { get; set; }
      }  class User : IPerson
      {
        private string name;
        public string Name
        {
          get { return name; }
          set { name = value; }
        }    public User(string name)
        {
          this.name = name;
        }
      }  class Person : IPerson
      {
        private string name;    public string Name
        {
          get { return name; }
          set { name = value; }
        }    public Person(string name)
        {
          this.name = name;
        }
      }public class Test
    {
      public Test()
      {}    public string GetName<T>(T t) where T : IPerson
        {
          return t.Name;
        }    private void button10_Click(object sender, EventArgs e)
        {
          User u = new User("aaa");
          MessageBox.Show(this.GetName<IPerson>(u));
        }
    }//泛型方法必须是配合 父类,接口 才有用的,一个单独的类,没有继承任何父类,没有实现任何接口,写个泛型方法是没意义的
      

  10.   

    同上,DoSth (info)就可以,不用写尖括号。使用.net4,有了Dynamic,就更厉害了,几乎可以把反射忘掉了。不过,Dynamic也会让我们看到更多完全看不懂(连编译器也无法检查出设计错误)的代码来。不知道Dynamic是祸是福,但是可以肯定地会有更多人用c#。
      

  11.   

    关于对泛型的反射方法,可以google“装配脑袋”的一些VB.NET文章。
      

  12.   


    你的typeof(string)我就不知道是什么意思,1L的方法是对的
      

  13.   

    运行时判断参数类型,貌似VB.NET早就实现了。