問題タブ [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.
scala - scala タイプ「抽出」
これは最も正しい用語ではないかもしれませんが、ボックス化された型とBox[T]
は type のことT
です。箱入りOption[Int]
も同様Int
です。
これらのタイプを抽出するにはどうすればよいでしょうか? 私の素朴な試み:
これを行う方法はありますか?Apocalisp ブログを除けば、Scala での型レベルのメタプログラミングに関する指示を見つけるのに苦労しています。
c# - 開封するとアイテム コレクションが変更されます
この Winforms プロジェクトに問題があります。次の方法で辞書propListが取り込まれたcombBoxでSelectedIndexChangedイベントを使用しようとしています。
これはイベント自体です:
次に、これを KeyValuePair キャストでスローします。
デバッグが次のことを示しているため、これが適切なキャストであることはわかっています。
私の質問は、明示的なキャストがアイテム コレクションを変更するのはなぜですか? キャストがキャストしているデータを変更しない C++ で育ったので、これは私には意味がありません。
注意として、コメント アウトされた行を使用すると、明らかにデータ ソースを null に設定すると、comboBox 内のすべてのメンバーが消去されるため、null 参照例外が発生します。
c# - mvc3 インターフェイスから具象クラスへのデータ注釈の反映
ビューモデルをさまざまなタイプのビューから抽象化しようとしています。全体が問題なくコンパイルされますが、データ注釈の「反映」(正式にはボックス化解除と呼ばれます) に問題があります。
私はインターフェースを持っています:
そして、インターフェイスをそのまま実装する2つのクラスがあります。
個人編集ビュー: ビュー/個人/編集など:
従業員の編集ビュー: ビュー/従業員/編集:
PersonController は次のとおりです。
すべてが正常にコンパイルおよびレンダリングされます。ただし、データの注釈は失われています。
したがって、従業員/編集は次のようになります。
名 [テキストフィールド]
姓 [テキストフィールド]
どちらの会社にお勤めですか?[テキストフィールド] 会社名は必須フィールドです
具象クラスのデータ注釈をボックス化解除する方法はありますか?
サイドノート
IPerson を Employee に明示的にキャストしてみました。
これを行うと、最初の名前が必要になりましたが、ラベルから表示プロパティを取得しませんでした。
更新 これがボックス化解除であるかどうかについて多くの議論を行った後、(より基本的な)具象クラスからデータ注釈を取得する簡単な解決策をまだ見つけていません。ビュー (またはヘルパー) でリフレクションを使用して具体的なクラスのデータ注釈を取得することは、単純化の目標を実際に無効にします。
基本的には同じですが、必須フィールドと表示名がわずかに異なるいくつかのビューがあります。ビューモデルをインターフェース化されたビューに渡すだけで、必要なフィールドと表示プロパティを把握できれば、非常に便利です。誰かがこれを行う方法を見つけた場合、それは大歓迎です。
c# - ボックス化解除すると Winforms ComboBox がフリーズする
ここでかなり具体的で奇妙な問題が発生しました.Googleと他の人は私に答えを与えることができませんでした.
A と B という 2 つの ComboBoxes を持つフォームがあります。A で項目を選択すると、データベースから情報が取得され、辞書に入れられ、BindingSource を使用して B に入れられます。ユーザーが B から何かを選択すると、戻り値が設定され、他には何もありません。
問題は ComboBox B にあります。その SelectedIndexChanged ハンドラーで、その SelectedItem のボックス化を解除しようとすると、ComboBox が「フリーズ」するため、ListBox B からの新しい選択の結果が表示されなくなり、長いリストは上下にスクロールしても更新されません。ただし、データの場所を覚えていれば、ComboBox は引き続き機能します。
B の SelectedIndexChanged ハンドラ:
問題の原因が SelectedItem プロパティではなく、ボックス化解除だけであることを示すダミー変数が 2 つあります。
この正確なコードを使用すると、ComboBox は正しく機能しますが、データを返すことはできません。コメントアウトされた行を有効にすると、値を返すことができますが、更新が停止します。
このコードでは表示されないことが 2 つあります。
コメント行を入れても、ComboBox A から 2 番目の選択を行うまで、すべて正常に動作します。別の言い方をすれば、ComboBox A から一度選択すると、ComboBox B は入力に基づいて更新されます。しかし、A からの選択が変更された場合、B は最後に表示された値を固定し、長いリストはスクロールしても更新されなくなります。
ComboBox A と B を満たすコードは、クリック ハンドラーと同様にほぼ同じですが、A は常に問題なく動作し、A から 2 番目の選択を行うと B がフリーズします。
この原因については理論化することしかできませんが、私の推測では、ボックス化解除では、2 回触れるのを嫌う一時的なメモリ ロケーションが使用されます。A の選択に基づいて B に入力するコードにも問題がある可能性がありますが、ボックス化解除がコメント アウトされているときに問題なく動作するという事実は、その疑念を軽減します。
私が知る限り、次のいずれかを行う必要があります。
- 別の方法で SelectedItem にアクセスする
- ボックス化解除せずに SelectedItem のデータにアクセスする
- 開封を完全に回避する方法を見つける
書式設定についてお詫び申し上げます。StackOverflow は、読みやすくするための私の試みを無視しているようです
c# - 自動開開
オブジェクトの配列があります(object[]
)。この配列のすべての項目は同じタイプです(コンパイル時には不明)。この配列を型付き配列に変換する必要があります。つまり、項目が整数の場合は、を取得しint[]
ます。
メソッドを調べましたArray.ConvertAll
が、テンプレートで特定のタイプを指定する必要があります。つまり、要素タイプを取得してから、ConvertAll
可能な場合ごとに呼び出す必要があります。
私もdynamic
運が悪かったキーワードを調べました(のようdynamic[]
に見えますobject[]
)。
どうすればこれを達成できますか?
c# - ジェネリッククラスでのボクシングとアンボクシングは避けてください
以下は私の質問を説明するための簡単なコードです。この明らかに不要なボクシング/アンボクシングを回避する方法はありますか?
c# - より大きな値の型へのボックス化解除
次のコードは、InvalidCastException
.
ボックス化された値のタイプが不明であるため、x
最初に aにキャストしてから にキャストできることはわかっていますが、それはオプションではありません (ただし、 a よりも明らかに小さいです)。short
int
int
ボックス化されたタイプよりも大きいタイプにボックス化解除するときの例外を回避するにはどうすればよいですか?
編集:タイプ
を使用して問題を解決しましたdynamic
(すべてのパフォーマンスへの影響があります)
haskell - ADT のアンボックス インスタンスを作成するにはどうすればよいですか?
ボックス化されていないベクターで使用するために、データ型をボックス化解除する方法に役立つ適切なリソースを見つけるのに苦労しています。データ型を作成するにはどうすればよいですか
Unbox のインスタンスになりますか?
編集:もう少し突っ込んだ後、一部の関数のパラメーターを厳密にすることで、GHCにそれらを自動的にボックス化解除するよう説得できるようです。これが私の場合に当てはまる場合は?どのパラメーターを厳密にするかを知るにはどうすればよいですか?
c# - ボクシングとアンボクシング:なぜこのデリゲートが一致しないのですか?
次のデリゲート「呼び出し元」署名を想定します。
およびマッチング方法:
が参照型の場合、次のように暗黙的T
に呼び出すことができます。MyFunc
逆に、T
が値型の場合、MyFuncを暗黙的に呼び出すと、コンパイルエラーが発生します。
私の質問は、これら2つの例を考えると、MyFunc
暗黙的に呼び出された場合は無効の呼び出しであるのに、次のように明示的に呼び出された場合は有効である理由です。
これは、タイプのボックス化とボックス化解除に関連するある種の問題だと思いますか?
c# - クラスが特定のタイプとしてボックス化解除できることをどのように保証できますか?
IValueConverter
bool をオブジェクトに変換するを作成しましたSystem.Windows.Visibility
( の反対を行いますBooleanToVisibilityConverter
)。オブジェクトで使用しようとする場合を除いて、正常に動作しObservable<bool>
ます。 Observable<T>
は、T に変換する暗黙の演算子を使用して定義したクラスです。問題は、bool としてボックス化解除すると、InvalidCastException
.
Observable
が としてボックス化されている場合、C# は暗黙の演算子を無視しているようObject
です。例えば:
Observable<bool>
bool としてボックス化解除できることを保証する方法はありますか?