2016-12-30 85 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