我正在嘗試編寫處理不同數字類型的類。我知道C#(和.Net在一般情況下,我認爲)沒有INumber
接口,所以我不能使用類似以下內容:如何編寫單個類以多次編譯不同的數字類型?
public class Adder<T> where T:INumber
{
public T Add(T a, T b)
{
return a + b;
}
}
這沒關係,不過,因爲我想避免裝箱/拆開我的每一個號碼。我可以,但是,使用條件編譯每種類型的我想支持:
#if FLOAT
public class AdderF
{
public float Add(float a, float b)
#else
public class Adder
{
public int Add(int a, int b)
#endif
{
return a + b;
}
}
這意味着我需要編寫不同的Library.dll
和LibraryF.dll
,但是。有沒有更優雅的解決方案呢?
顯然,在我的例子中,我可以簡單地編寫代碼兩次。然而,我想使用這個過程來創建一個整數版本和浮點版本的大型複雜數據結構,所以當更新我的結構時,不希望發生複製粘貼錯誤。我也不希望速度損失將浮點結構包裝在整體包裝中,並且不必要地將所有輸入轉換爲更寬鬆的數據類型。
就像我說的,我試圖哄騙更多的性能,我的數據結構,我認爲在我可以使用'int'的時候在任何地方使用'decimal'都是有效的。 T4絕對是一個我不知道的很酷的技術,並且一定會對它進行研究! – dlras2