2010-05-12 152 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)