8

重複の可能性:
.NetのInt128?

Int128をC#で実装することを決定した後、他のdotNetデータ型のように見せることができればいいと思いました。しかし、次の機能を実装できませんでした。

  • 接尾辞の初期化:13Lや0.2Dなど

C#で独自のサフィックスを作成できますか?
そして、私ができない場合..どうすればそれを初期化できますか?
すなわち

Int128 a= ??
4

4 に答える 4

17

いいえ、C# で独自の形式のリテラルを作成することはできません。

、、およびから暗黙的な変換を行うことができ、次のことが可能になります。intlonguintulong

Int128 a = 100;

しかし、それ以上の値を指定することはできませんulong.MaxValue

からの暗黙的な変換をdecimal使用すると、より広い範囲が可能になりますが、単なる整数ではない値のデータが失われるため、悪い考えです。

基本的にulong.MaxValue、文字列を解析することはできますが、それは実際には理想的ではありません。あるいは、下位 64 ビット用と上位 64 ビット用の2 つのulongを使用するコンストラクターを作成することもできます。

于 2010-05-12T14:25:52.450 に答える
8

独自のサフィックス初期化子を作成することはできません。これは言語の一部であり、コンパイラに組み込まれています。一方、独自の C# コンパイラを作成する場合は、好きなように実行して、好きなように拡張できます。

どのように初期化するかについては、どのように記述したかによって異なります。クラスの場合は、newキーワードで初期化するか、精度の低い数値型への暗黙的な変換を記述する必要があります。

ulong.MaxValueJon が指摘したように、文字列を操作しない限り、実際に大きな値に設定する方法はありません。また、何らかの形式 (文字列? ? の数) で内部的に表現し、ulongsすべての変換と操作が正しく機能することを確認する必要があります (オーバーフローはどうですか?)。

于 2010-05-12T14:27:08.493 に答える
1

初期化のヒントについては、4.0 の新しい BigInteger 構造体を参照してください。http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

于 2010-05-12T14:30:20.023 に答える
1

いいえ、サフィックスの初期化はできません。そのちょっとしたかわいらしさは、次の C++ 標準で利用できるようになるでしょう...しかし、余談です。

最も明白な選択肢はInt128(long hi, ulong lo)Int128(string)です。

于 2010-05-12T14:28:03.857 に答える