2010-05-12 149 views
8

可能重複:
Int128 in .Net?C#自定義數據類型!

後,我決定執行我Int128在C#中,我認爲這將是很好,使它看起來像其他dotNet的數據類型。但我可以沒有實現以下特點:

  • 後綴初始化:如13L和0.2D

我可以在C#中創建自己的後綴嗎?
如果我不能......我該如何初始化它?

Int128 a= ?? 
+0

看到這篇文章http://stackoverflow.com/questions/227731/int128-in-net – 2010-05-12 14:26:50

回答

8

您不能創建自己的後綴初始化程序 - 這是該語言的一部分,並已編譯到編譯器中。另一方面,如果你編寫自己的C#編譯器,你可以做任何你想做的事,並以你想要的方式擴展它。

至於如何初始化它 - 這取決於你如何寫它。如果它是一個類,則需要使用關鍵字new對其進行初始化,或者將一些隱式轉換寫入精度較低的數值類型。

正如Jon指出的那樣,如果不進行字符串操作,您將無法將其設置爲大於ulong.MaxValue的值。您還需要以某種形式(字符串?ulongs?)在內部表示並確保所有轉換和操作都正常工作(溢出情況如何?)。

17

不,你不能創建自己的C#文字形式。

可能有來自intlonguintulong,允許隱式轉換:

Int128 a = 100; 

但你不能指定值比ulong.MaxValue那樣大。

decimal進行隱式轉換會允許更大的範圍,但這不是一個好主意,因爲您將丟失任何不是整數的值的數據。

基本上沒有什麼能夠允許大於ulong.MaxValue的字面保證整數值 - 你可以解析一個字符串,但這不是很理想。或者,您可以創建一個構造函數,其中兩個兩個,一個用於底部64位,一個用於頂部64位。

1

不,你不能做後綴初始化。即將推出的C++標準將提供一點可愛......但我離題了。

最明顯的選擇是Int128(long hi, ulong lo)Int128(string)