可能重复:
Int128 in .Net?
在我决定用C#实现我的Int128之后,我认为让它看起来像其他dotNet数据类型会很好..但是我无法实现以下功能:
我可以在C#中创建自己的后缀吗? 如果我不能......我怎么能初始化呢? 即
Int128 a= ??
答案 0 :(得分:17)
不,你不能在C#中创建自己的文字形式。
您可以从int
,long
,uint
和ulong
进行隐式转换,允许:
Int128 a = 100;
但您无法指定大于ulong.MaxValue
的值。
从decimal
进行隐式转换会允许更大的范围,但这是一个坏主意,因为您将丢失任何不仅仅是整数的值的数据。
基本上没有任何东西允许文字保证为整数值大于ulong.MaxValue
- 你可以解析一个字符串,但这不是很理想。或者你可以创建一个构造函数,它接受两个 ulongs,一个用于底部64位,一个用于最高64位。
答案 1 :(得分:8)
您无法创建自己的后缀初始化程序 - 这是语言的一部分并融入编译器。另一方面,如果你编写自己的C#编译器,你可以做任何你想做的事情,并以你希望的方式扩展它。
至于如何初始化它 - 这取决于你如何编写它。如果它是一个类,则需要使用new
关键字对其进行初始化,或者将一些隐式转换写入精度较低的数值类型。
正如Jon指出的那样,如果没有一些字符串操作,你将无法将其实际设置为大于ulong.MaxValue
的值。您还必须以某种形式在内部表示(字符串?一些ulongs
?)并确保所有转换和操作都正常工作(溢出怎么办?)。
答案 2 :(得分:1)
不,你不能做后缀初始化。即将推出的C ++标准将提供这种可爱性......但我离题了。
最明显的选择是Int128(long hi, ulong lo)
和Int128(string)
。
答案 3 :(得分:1)
您可以在4.0中查看新的BigInteger结构,以获取有关初始化的提示。 http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx