我定義泛型類型:(整數的花車或之一)約束泛型類型參數的數值類型
public class Point<T> where T : IConvertible, IComparable
我真的很想做的是限制噸至是數字型CLR中沒有INumeric。是否有一個接口或一組接口可用於將此類型約束爲其中一個盒裝數字類?
我定義泛型類型:(整數的花車或之一)約束泛型類型參數的數值類型
public class Point<T> where T : IConvertible, IComparable
我真的很想做的是限制噸至是數字型CLR中沒有INumeric。是否有一個接口或一組接口可用於將此類型約束爲其中一個盒裝數字類?
不幸的是,沒有。這已經是一個highly requested feature很長一段時間了。
現在,最好的選擇是可能使用:
where T : struct, IConvertible, IComparable<T>
(該結構約束防止串用法...)
然而,這仍然允許實現任何用戶定義的值類型使用適當的限制條件。
一個不是很舒服的方法是檢查構造函數中的有效類型並拋出異常。它的工作原理,但它不是「編譯器安全」,併產生運行時錯誤。 :-(
不,你不能做到這一點。 您可以選擇在哪裏T:struct,IConvertible,IFormattable,IComparable
將其限制於所有blittable數值類型和枚舉,但即使你沒有限制,你仍然不能T
爲使用運營商運營商都是靜態的。
如
point.X-point.Y
將泛型不知道靜態成員是非法的。
這不是在C#來完成。您最多可以做到這一點有一個新的IPOINT接口那ca n強制執行 –
[C#:通用接口的數字]可能的重複(http://stackoverflow.com/questions/1325131/c-generic-interface-for-numbers) – user7116