問題タブ [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.
language-agnostic - ボクシングとアンボクシングとは何ですか?トレードオフは何ですか?
明確で簡潔で正確な答えを探しています。
良い説明へのリンクを歓迎しますが、理想的には実際の答えとして。
c# - C# ボクシングの質問
まず、2 つの例:
さて、2番目が機能しない理由についての私の推測は、ボクシングが原因です。このコードの背後にある目的は、実装することIComparable
です。エラーをスローするよりも、必要に応じてオブジェクトを long または ulong に強制する方法が必要です。基本的な数値型 (byte、int、long、ubyte など) ごとにチェックを実装する必要はありません。最大の数値型でそれらをキャッチし、そのように処理するだけです。ここにいるすべての賢い人々からの考えは?できればリフレクションを避けて、オブジェクトのボックス化を解除するにはどうすればよいIComparable
ですか?
編集:
これは機能しているように見えますが、問題を回避するための恐ろしいハックのようです。私だけでしょうか?
c# - 「AS」キーワードをインスタンス化する
私は最近、JSON と ExtJs フレームワークを使い始めました。例として次のコードを見つけました。
これを使用して、フロントエンドから情報を取得します。
次に、例では次のことを行います。
「as」キーワードがそのように使用されているのを見たことがありません。これは、updatedConfig 変数を JavaScriptObject として明示的にボックス化する別の形式ですか、それともこれについて理解していないことがありますか?
ありがとう
c# - ボクシングvsアンボクシング
私が最近受けたもう1つのC#インタビューの質問は、ボクシングとアンボクシングが何であるかを知っているかどうかでした。値型はスタックにあり、参照型はヒープにあることを説明しました。値が参照型にキャストされる場合、それをボクシングと呼び、その逆も同様です。
それから彼は私にこれを計算するように頼んだ:
何i
ですか?
私はそれを台無しにして50と言いましたが、実際には20です。今では理由がわかったと思いますが、さまざまな組み合わせで遊んでいたときに、これを見て驚いた。
私も見ることを期待していましb == 2
たが、そうではありません、なぜですか?a
2番目のボクシングがヒープ上のオブジェクト全体を破壊して置き換えるためですか?
私がこれを行う場合、それは問題ないからです:
何t2.x
ですか?3でなければなりません。しかし、これはボクシング/アンボクシングの例ではありません、これは正しいですか?では、これをどのように要約しますか?
ボクシング/アンボクシングの変換で上記と同じ値になる可能性はありますか?
c# - C#:ジェネリックスを使用してオブジェクトを符号なし数値型にキャストする
オブジェクトタイプフィールド(DataSetから取得)からのデータを宛先(型付き)フィールドに変換するコードを記述しようとしています。私は動的変換を使用して(少なくとも試して)それを行っています。文字列、int、DateTimeでは正常に機能するようです。
ただし、符号なしタイプ(ulong、uint)では機能しません。以下に、私がやりたいことを示す簡単なコードがあります。ul varタイプをulongからintに変更すると、正常に機能します。
誰か手がかりがありますか?
java - 一部の言語で Boxing と Unboxing が必要なのはなぜですか?
これは、ボックス化とボックス化解除とは何かという問題ではなく、Java や C# などの言語でそれが必要な理由です。
私は C++、STL、Boost に精通しています。
C++では、このようなものを非常に簡単に書くことができました.
私はJavaの経験がありますが、このようなことを書かなければならなかったので、本当に驚きました.
私の質問は、なぜ Object である必要があるのですか? Generics について話すときにプリミティブ型を含めることが技術的に難しいのは何ですか?
c# - intを小数として箱から出せないのはなぜですか?
IDataRecord reader
次のように小数を取得していることがあります。
何らかの理由で、これは「指定されたキャストが無効です」という無効なキャスト例外をスローします。
私がそうするときreader[0].GetType()
、それはそれがInt32であることを私に告げます。私の知る限り、これは問題ではないはずです。
私はこれをこのスニペットでテストしましたが、これは問題なく機能します。
これにより、リーダーに含まれるintを小数としてアンボックス化できないのはなぜかと頭を悩ませました。
なぜこれが起こっているのか誰かが知っていますか?私が見逃している微妙なものはありますか?
.net - ボクシング/アンボクシングと型キャストの違いは何ですか?
ボクシング/アンボクシングと型キャストの違いは何ですか?
多くの場合、これらの用語は同じ意味で使用されているようです。
c# - オブジェクトをvaluetypeにキャストするときに、c#のボックス化解除の例外を解決するための最良のアプローチは何ですか?
コードスニペットをVB.NETからC#に変換したところ、この問題に遭遇しました。
このコードを考えてみましょう:
コンパイラまたは実行時にエラーは発生しません。zは5です。
それでは、このコードをC#に変換しましょう
コンパイラからのエラーはありませんが、実行時に例外がスローされます。
今私の質問は、これを行うための最も賢いC#の方法です。
現在、私のコードは次のようになっています。
しかし、別の解決策は次のようになります。
これは少し紛らわしいように見えますが、おそらくdecimal.Parseよりもオーバーヘッドが少ないと思います。
c# - C#型推論は間違った型を取得します
次のプロパティを作成しました。これは、がであったときにInvalidCastException
ゲッターにアクセスした場合にスローします。ViewState[TOTAL_RECORD_COUNT]
null
私の考えでは、オブジェクトを誤ってボックスから外そうとしましたが、オブジェクトにViewState[TOTAL_RECORD_COUNT]
がint
含まれているために失敗しましたlong
が、そのロジックに欠陥がある可能性があります。その欠陥を指摘するための演習として、読者に任せます。
それ以来、私はそのプロパティを読むように変更しました
ただ膨らむだけで動作します。それでも、元のバージョンの何が問題だったのか疑問に思っています... StackOverflowが救いの手を差し伸べますか?
(long)(ViewState[TOTAL_RECORD_COUNT] ?? -1)
イミディエイトウィンドウで実行しようとするとエラーメッセージが表示され、実行すると。が表示されることに注意しCannot unbox 'ViewState[TOTAL_RECORD_COUNT] ?? -1' as a 'long'
て(ViewState[TOTAL_RECORD_COUNT] ?? -1).GetType().Name
くださいInt32
。私は実行(long)-1
して、最終的に-1として終わることができInt64
ます...それで、どうしたのですか?