問題タブ [unboxing]

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.

0 投票する
2 に答える
795 参照

java - 開梱の問題

LinkedList クラスを拡張するクラスがあります。コードの抜粋を次に示します。

これは、自動ボックス化解除された int 値を返すことが期待されています。しかし、何らかの理由で、型に互換性がなく、必要な型が int で、見つかった型が Integer であるというエラーがコンパイラによってスローされます。これは別のクラスで完全にうまく機能します! 何を与える?:(

0 投票する
2 に答える
1598 参照

scala - 逆コンパイルされたScalaコードでボクシング/アンボクシングを認識する方法は?

この質問に対する受け入れられた最良の回答には、ボクシングが発生する理由が明確に説明されています。

ただし、(java decompilerを使用して)コードを逆コンパイルすると、scala.runtime.BoxesRunTimeの使用がわかりません。さらに、(JProfilerを使用して)コードをプロファイリングすると、BoxesRunTimeのインスタンスが表示されません。

では、ボクシング/アンボクシングの証拠が実際に行われていることをどのように確認できますか?

0 投票する
1 に答える
4176 参照

c# - out パラメータと ref パラメータを使用する場合のボックス化とボックス化解除

メソッドが ValueType の out/ref パラメータを受け入れると、ボックス化/ボックス化解除が発生しますか?

0 投票する
2 に答える
1551 参照

c# - Expression.LessThan vs LambdaExpression>>

1つのオブジェクトをパラメーターとして受け取り、最終的にオブジェクトを返すLambdaExpressionがあります。テストの目的で、オブジェクトとしてボックス化されたDateTimeを返すLambda(実際に渡したものと一致するようにロングハンドで作成された)を次に示します。これを処理するために、LambdaExpressionはXmlNodeを受け取り、オブジェクトを返します。オブジェクトを返す必要があります。実際の戻りタイプは次のいずれかになります。DateTime、bool、int、decimal、XmlDocument [これまでのところ]一般的な考え方は、パーサーのどこかでこのラムダが作成され、そこから値を抽出するというものです。パラメータを入力し、入力されたものを返しますが、オブジェクトでボックス化されています。

コードの後半で、<、<=、>、> =、==、および!=を評価しているため、このLambdaExpressionの結果を別の式と比較します。

通常、LambdaExpressionはExpression.LessThanの左側にあると想定できますが、ほとんどすべての式である可能性がありますが、型指定されていると想定します。つまり、ConstantExpressionまたは同様のものである可能性がありますが、タイプがあります。

これは、Expression.Invokeが呼び出されたときにLambdaExpressionがオブジェクトを返し、RHSがそのタイプであるため、Expression.LessThan[たとえば]が失敗することを意味します。

LambdaExpressionから返されたオブジェクト内にボックス化されたタイプが、実際には右側のタイプに匹敵すると仮定します。例えば

ボックス化されたタイプとボックス化されていないタイプをクラッシュせずに比較できる式を作成するにはどうすればよいですか?私はlinqpadでさまざまな順列を試しました。これには、通常のc#でこれを書き込もうとすることも含まれます。つまり、式を使用せず、if-then-elseをネストするだけですが、正しく機能させることができませんでした。通常、私はおそらく次のようなものを書くでしょう:

これにより、oとcompareが実際には同じタイプであり、そのうちの1つがオブジェクトとしてボックス化されていると仮定すると、<操作を実行できます。

ですから、私の質問は、左側にLambdaExpressionがあり、右側にExpressionがある場合、上記のコードをどのように記述すればよいかということです[2つが同じタイプでない場合、結果としてfalseの方がクラッシュよりも優れています]

誰かが助けてくれることを願っています、

ガレス

0 投票する
1 に答える
288 参照

vb.net - 不明な入力でのボクシング/アンボクシングの回避

XMLを解析し、いくつかのデータを取得するアプリケーションを作成しています。各xmlノードは、データ(const)、データを取得するレコードセットの列名(var)、条件(enum)などに応じて可能なデータ値のサブセットを指定します。また、データとともに、データをユーザーに表示する必要がある形式を指定する場合もあります。

重要なのは、ノードタイプごとに値を異なる方法で処理し、いくつかのアクチノンを実行する必要があるため、ノードごとに、後でフォーマットするために戻り値を一時変数に格納する必要があるということです...フォーマットできることはわかっていますそれはすぐそこにあり、それを返しますが、それは自分自身を繰り返すことを意味し、私はそうすることを嫌います。

したがって、質問:型が不明でジェネリックを使用できない場合に、ボックス化/ボックス化解除を回避しながら、返す値を一時変数に格納するにはどうすればよいですか?

PS:パーサー、XMLスキーマ、およびレコードセットを埋めるビューを設計しているので、すべての変更が妥当です。


アップデート

コードもXML値も投稿できませんが、これはXML構造と実際のタグです。

0 投票する
2 に答える
297 参照

.net - 参照型のみを格納する場合、ジェネリック コレクションを使用する利点はありますか?

私は本を​​読んでいて、ジェネリックを使用すると、プログラマーは、例えばStack.

スタック(ジェネリックではない)は参照型変数のみを保持でき、キャストのみでボクシングは行われないため、完全には正しくないと思います。

編集:私の知る限り、ボクシングは値型からオブジェクトへの変換のみに関連しています。それは正しいですか、それとも何か不足していますか?

0 投票する
2 に答える
7789 参照

java - 整数ラッパークラスと==演算子-動作はどこで指定されますか?

の範囲で==(ある場合)を返すことがわかりましたが-128 - 127、なぜそのような仕様があるのですか?

0 投票する
2 に答える
168 参照

c# - C#/.NETで値型を参照型として渡すときに最高のパフォーマンスを得るにはどうすればよいですか?

値型をメソッドに渡す必要があるが、何らかの理由で参照型として渡す必要がある場合は、次のほうが高速ですか?

  1. として渡すobject
  2. パスはValueType
  3. 汎用ラッパーとして渡す

私が何を意味するかを正確に示すために、以下にいくつかのサンプルコードを示します。

0 投票する
3 に答える
7720 参照

java - 整数の自動アンボックス化と自動ボックス化によりパフォーマンスの問題が発生しますか?

x++;現在、 where xisIntegerと not anを使用して、いくつかの反復やその他の操作を行っていますint

システム上の一部のユーザー操作で操作が繰り返される場合がありますが、数学アプリケーションのように複雑すぎたり数が多すぎたりすることはなく、ユーザー トランザクションごとに最大 10000 回までです。

このボックス化解除とその後のボックス化は、パフォーマンスに顕著なミリ秒の影響を与えますか?

0 投票する
5 に答える
10454 参照

c# - ボックス化された値の型の比較

今日、私は自分が書いた興味深いバグに出くわしました。一般的なセッターで設定できるプロパティのセットがあります。これらのプロパティは、値型または参照型にすることができます。

このメソッドの単体テストを作成するときに、値型の条件が常に真であることがわかりました。これがボクシング/アンボクシングによるものであると理解するのにそれほど時間はかかりませんでした。コードを次のように調整するのにも、それほど時間はかかりませんでした。

問題は、私がこの解決策に完全に満足しているわけではないということです。値がボックスで囲まれていない限り、単純な参照比較を維持したいと思います。

私が考えている現在の解決策はEquals()、ボックス化された値のみを要求することです。ボックス化された値のチェックを行うのは少しやり過ぎのようです。もっと簡単な方法はありませんか?