public T GetDatas<T>() where T : IDatas
{
if(this.taskType == ETaskType.DEFAULT_TASK)
{
return (T)this.dds;
}
else
{
return (T)this.cds;
}
}要达到这个效果该怎么写?
dds,cds等成员变量继承于 IDatas我想根据当前类的 枚举来判断返回不同的 T.

解决方案 »

  1.   

    public IDatas GetDatas()    {
            if(this.taskType == ETaskType.DEFAULT_TASK)
            {
                return this.dds;
            }
            else
            {
                return this.cds;
            }
        }直接返回IDatas不可以么?
      

  2.   

    没看出来有使用范型的必要,直接返回就可以了
    public IDatas GetDatas()
    {}
      

  3.   

    返回IDatas 之后还要强转成子类(这是可行的,但我需求是泛型啊). 因为接口只是个架子摆在那 ,我没定义接口方法.实际上 dds 和 cds 是2个完全不同的东西,没有任何共性.  只不过我强行让他们 实现了 IDatas 接口而已.
      

  4.   

    怎么这么武断.dds 内挂载3个 对象类型 成员变量的属性cds 内挂载4个 值类型的 成员变量的属性.我要访问这些东西 怎么可能通过  IDatas  呢.  如果非要返回 IDatas  的话最终我还是不得不强转回子类
      

  5.   

    http://zhidao.baidu.com/question/439541252.html
    还有, 这个人为什么可以那么实现?
      

  6.   

    那么首先明确一个问题,在你这种使用需求下,你定义的IDatas 接口本身没有意义,实际只是在利用语法而已。
    这种设计本身就不是很合理的,属于接口滥用。
      

  7.   

    我解决了.
    http://topic.csdn.net/u/20110927/14/07ed6192-eaba-4d95-bf99-78f4df05621b.html这个给了答案, 转T之前强转成object即可...
      

  8.   

    你实现了相同的接口。就算你不转OBJECT也可以直接转。
    这样你还是强制转换成子类一样的道理。