日期:2014-05-17  浏览次数:20834 次

泛型参数转换为原型
举例

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";
     }
...
}

------解决方案--------------------
看不出你在什么时候转成B,写一个 GetData<T>方法转为需要的类型
------解决方案--------------------
你这样写就对
虽然我可能会这样写:
    public void SetData<T>(T obj)
    {
        var b = obj as B;
        if (b != null)
        {
            var data = b.GetData();
        }
    }
------解决方案--------------------
 public void SetData<T>(T obj) 
where T:IXXX 带有这方法的接口

这样做才有意义。否则没有任何意义。也就是反射, dynamic这种临时性的玩意
------解决方案--------------------
只要如此即可:
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";