举例public Class A
{
     public void SetData<T>(object obj)
     {
       //传入的obj类型由T来定
       //若obj类型是B
       //求如何调用obj的GetData()方法?
       //强转,as 都不行,难道在B中还要自己实现一个object 到B的转换方法?
      }
}public Class B
{
     public string GetData()
    {
         return "123";
     }
...
}

解决方案 »

  1.   

    看不出你在什么时候转成B,写一个 GetData<T>方法转为需要的类型
      

  2.   


    public Class A
    {
        public void SetData<T>(object obj)
        {
           //传入的obj类型由T来定
           //若obj类型是B
           //求如何调用obj的GetData()方法?
           //强转,as 都不行,难道在B中还要自己实现一个object 到B的转换方法?
           if(typeof(T) == typeof(B))
           {
                string data = ((B)obj).GetData();//目的是这样的,我想拿到这样的数据
           }
         }
    }
     
    public Class B
    {
         public string GetData()
        {
             return "123";
         }
    ...
    }
      

  3.   

    public Class A
    {
        public void SetData<T>(object obj)
        {
           //传入的obj类型由T来定
           //若obj类型是B
           //求如何调用obj的GetData()方法?
           //强转,as 都不行,难道在B中还要自己实现一个object 到B的转换方法?
           if(typeof(T) == typeof(B))
           {
                string data = ((B)obj).GetData();//目的是这样的,我想拿到这样的数据
           }
         }
    }
      
    public Class B
    {
         public string GetData()
        {
             return "123";
         }
    ...
    }
      

  4.   

    你这样写就对
    虽然我可能会这样写:
        public void SetData<T>(T obj)
        {
            var b = obj as B;
            if (b != null)
            {
                var data = b.GetData();
            }
        }
      

  5.   


    真对? 我用的时候咋不行呢? 提示我object无法隐式转换为B啊.
      

  6.   

     public void SetData<T>(T obj) 
    where T:IXXX 带有这方法的接口这样做才有意义。否则没有任何意义。也就是反射, dynamic这种临时性的玩意
      

  7.   

    只要如此即可:
    public class A
    {
        public void SetData<T>(T obj) where T:IGetData
        {
           string data = obj.GetData();
        }
    }public class B : IGetData
    {
         public string GetData()
        {
             return "123";
         }
    ...
    }public interface IGetData
    {
         string GetData();
    }
    用了泛型就别再用弱类型object了,全部强类型到底,不用接口限制就没意义了。
      

  8.   


    public Class A
    {
        public void SetData<T>(object obj)
        {
           //传入的obj类型由T来定
           //若obj类型是B
           //求如何调用obj的GetData()方法?
           //强转,as 都不行,难道在B中还要自己实现一个object 到B的转换方法?
           if(typeof(T) == typeof(B))
           {
                string data = ((B)obj).GetData();//目的是这样的,我想拿到这样的数据
           }
           else if(typeof(T) == typeof(string))
           {
                string data = (string)obj;
           }
         }
    }
       
    public Class B
    {
         public string GetData()
        {
             return "123";
         }
    ...
    }public Class C
    {
        public C()
       {
          A mData = new A();      //那也就是说这样用时行不通的了?
          A.SetData<B>(new B);
          A.SetData<string>("name");
       }
    }
      

  9.   


          
    哦 看来如果没有同样的接口,用泛型没什么意义了.只能这样用了吧?:
     if(obj.GetType() == typeof(B))
           {
                string data = ((B)obj).GetData();//目的是这样的,我想拿到这样的数据
           }
           else if(obj.GetType() == typeof(string))
           {
                string data = (string)obj;
           }