2016-12-30 65 views
1

我是C#中的新手。我需要创建一个通用类。还应该有一个约束:“客户端可以通过Int或Float类来实现”。 包含一个将返回总数的'totalNums'方法。支持C中泛型类中的+运算符#

泛型类

public class clsPrint<T> 
{  

    public T totalNums(T num1, T num2) 
    { 
     T Total = num1 + num2; 
     return Total; 
    }   

} 

上的 “+ NUM1 NUM2” 编译时间错误:运算符 '+' 不能被应用于类型的操作数 'T' 和 'T'

为什么我得到这个错误,将有什么解决方案?

+0

当写仿制药,'T'基本处理作为'对象',当你写代码。因此,'object + object'没有任何语法意义。 – Abion47

+0

那么,有没有其他方法可以实现它? @ Abion47 – KiddoDeveloper

+0

严格地说,有一种使用反射和抽象的方式(请参阅我的重复评论),但它非常难看。一般来说,我建议不要使用泛型,而是使用两种不同的方法重载:一种采用'int'参数,另一种采用'float'参数。 – Abion47

回答

0

因为T的类型在实例化之前是未知的,所以不能保证类型T将支持+运算符。

有使用dynamic运营商解决方法:(注:如果你不通过+支持的操作数,然后它会引发运行时错误。)

public T totalNums(T num1, T num1) 
     { 
      dynamic dx = num1, dy = num1; 
      return dx + dy; 
     } 
+0

那么,有没有其他办法可以实现它? – KiddoDeveloper

+0

好。我可以将Int,Float或string类添加为约束类吗? 示例:public class clsPrint 其中T:String – KiddoDeveloper

+1

@Mohit'int','float'和'string'是密封类。您不能将密封类用作通用约束。 – Abion47