日期:2014-05-20  浏览次数:20794 次

泛型使用问题
我想这样,让一个方法,根据传入不同的值类型做不同的处理。
-------------------------------------------------------
  public   Tinput1   Compute <Tinput1,Tinput2> (Tinput1   t1,Tinput2   t2)
                {
                        if   (t1   is   int&&t2   is   int)
                        {
                                t1   =   (int)t1;
                                t2   =   (int)t2;
                                t1   =   t1   +   t2;
                        }
                        else   if   (t1   is   string&&t2   is   string)
                        {
                                t1   =   (string)t1;
                                t2   =   (string)t2;
                                t1   =   t1   +   t2;
                        }
                        else   if   (t1.GetType().IsSubclassOf(typeof(object)))
                        {
                                this.b   =   t1.Equals(t2);
                                t1   =   (bool)t1;
                                t1   =   Convert.ToInt32(this.b);
                        }
                        return   t1;
                }

但是出现8个错误,不能t1   =   (int)t1;t2   =   (int)t2;t1   =   (string)t1;t1   =   t1   +   t2;等,那有什么办法   让它可以呢?


------解决方案--------------------
t1 = (int)t1;
t2 = (int)t2;
t1 = t1 + t2;

=====>

return (int)t1 + (int)t2;
------解决方案--------------------
你的代码中都没用上泛型....你的方法实际上是
public object Compute(object t1,object t2);

不过是批一件没有意义的泛型的皮. 泛型的好处是把类型检查提前到了编译时,但是你在运行的时候执行了这么多的 is 啊强制转换啊.....

而且最后那个else逻辑明显有问题

t1 = (bool)t1;
从哪里让你觉得这个语句可以执行成功了?

------解决方案--------------------
你这种情况不要用泛型,用方法重载不管在执行效率上还是维护性上都更好