問題タブ [boxing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 一部の言語で Boxing と Unboxing が必要なのはなぜですか?
これは、ボックス化とボックス化解除とは何かという問題ではなく、Java や C# などの言語でそれが必要な理由です。
私は C++、STL、Boost に精通しています。
C++では、このようなものを非常に簡単に書くことができました.
私はJavaの経験がありますが、このようなことを書かなければならなかったので、本当に驚きました.
私の質問は、なぜ Object である必要があるのですか? Generics について話すときにプリミティブ型を含めることが技術的に難しいのは何ですか?
java - int[] を List に変換する方法Javaで?
Javaに変換int[]
するにはどうすればよいですか?List<Integer>
もちろん、アイテムごとにループで行う以外の答えにも興味があります。しかし、他に答えがない場合は、この機能が Java の一部ではないという事実を示すために、その答えを最良のものとして選びます。
.net - ボクシング/アンボクシングと型キャストの違いは何ですか?
ボクシング/アンボクシングと型キャストの違いは何ですか?
多くの場合、これらの用語は同じ意味で使用されているようです。
c# - 一般的な列挙型からintへのC#非ボクシング変換?
常に列挙型になるジェネリック パラメーター TEnum が与えられた場合、ボックス化/ボックス化解除せずに TEnum から int にキャストする方法はありますか?
このコード例を参照してください。これにより、値が不必要にボックス化/ボックス化解除されます。
上記の C# は、次の IL にコンパイルされたリリース モードです (ボックス化およびボックス化解除のオペコードに注意してください)。
列挙型変換は SO で広く扱われていますが、この特定のケースに対処する議論は見つかりませんでした。
c# - using ステートメントが構造体の場合、その引数をボックス化するのはいつですか?
次のコードについていくつか質問があります。
私の質問は次のとおりです。
- ボックス
Disposable
から返された構造体で動作する using ステートメントは、構造体であるかどうか。Test()
- どうすれば自分で答えを見つけることができますか?
自分自身を見つけようとするために、上記のコードによって生成された IL を調べました。Main(...)
メソッドの IL は次のとおりです。
そこにある仮想メソッドの呼び出しがボックス化操作を導入すると思われますL_0010
が、実際のbox
命令はここにはありません。
私が尋ねている理由は、しばらく前、おそらく 1 ~ 2 年前に、誰かがコメントした using ステートメントの「最適化」をオンラインで見たからです。オブジェクトの短時間ロックの構文として using ステートメントが使用され、メソッドでロックが取得され、構造体が返され、破棄されるとロックが解放される場合がありました。コードは次のようになります。 :
コメントは、LockTheObject
メソッドの戻り値の型をIDisposable
実際に使用される構造体に変更することで、ボクシングが回避されたというものでした。
しかし、私はこれが本当なのか、それともまだ本当なのか疑問に思っています。
誰かが私を正しい方向に向けることができますか? ボックスの操作を確認するためにランタイム アセンブリ コードを検査する必要がある場合は、何を探すべきかの例を示してください。私はアセンブリ コードに精通しているので問題ありませんが、何も飛び出していません。私もそれを見たとき。
c# - C# で「型」オブジェクトを使用してオブジェクトを型キャストする
これまでのところ、これは私にとって少しトリッキーであることが証明されています. System.Type オブジェクトを使用してオブジェクトを型キャストできるかどうか疑問に思っています。
私が意味することを以下に示しました:
上記は汎用インターフェイスであるため、型に「オブジェクト」を使用しています。
c# - BCL の隠しボクシング?
最近、フレームワークの v2.0 でジェネリックが導入される前に書かれたと思われる「レガシー」コードをまだ使用している部分が BCL にあることに気付きました。どうやら、その「レガシー」コードの一部により、CLR が多数のボックス化/ボックス化解除操作を実行する可能性があります。
ボクシングの過度の使用は決して良いことではないので、ボクシングが発生していることに気付いた BCL の他の重要な場所があるかどうかを知りたいと思いましたか? ありがとう
.net - タイプをボックス化する必要があるかどうかを判断する方法は?
MSDN のドキュメントでは、ボックス化が必要なのは値型だけであると書かれていますが、これは文字列には当てはまりません。これは値型であり、ボックス化する必要はありません。最初に Type.IsValueType を試しましたが、文字列に対して true を返すため、型を本当にボックス化する必要があるかどうかを判断するために使用することはできません。あなたが知っている他の方法はありますか?文字列だけが例外ですか?
更新: int を参照しているコードで間違いを犯し、それが文字列だと思いました。文字列は実際には値型です。指摘してくれてありがとう!
c# - T:クラスの制約を持つジェネリックメソッドがボクシングをもたらすのはなぜですか?
Tをクラスに制約するジェネリックメソッドで、生成されるMSILコードにボクシング命令が含まれるのはなぜですか?
Tは参照型に制約されているので、生成されたコードはボクシングを実行する必要がないので、私はこれに非常に驚いていました。
これがc#コードです:
生成されたILは次のとおりです。
ボックス!!Tの説明に注意してください。
なぜこれが生成されているのですか?
これを回避する方法は?
.net - C++/CLI: ボックス化と汎用リスト
オブジェクトへの参照の一般的なリストを作成しようとしていPointF
ます。(いいえ、オブジェクトの一般的なリストを作成するつもりはありませんPointF
。)ただし、次の行はコンパイルに失敗します。
一方、PointF
参照の配列の作成は、次のように問題なく機能します。
サンプルプログラムは次のとおりです。
参照の一般的なリストを作成するにはどうすればよいPointF
ですか? つまり、ボックス化された s の一般的なリストを作成するにはどうすればよいPointF
ですか?