問題タブ [casting]
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.
c# - C#コンパイラが暗黙のキャスト演算子を呼び出さないのはなぜですか?
次のタイプがあるとします。
そして、次のコードスニペットをコンパイルしてみてください。
これはうまくコンパイルされ、エラーは発生しませんでした。i1とi2は整数にキャストし、加算が評価されます。
しかし、次のタイプがある場合:
別のコードスニペットをコンパイルしてみてください。
そして、なぜコンパイラが「エラーCS0019:演算子'+'をタイプ'MyNullable<Money>'および'MyNullable <Money>'」のオペランドに適用できないのかという質問がありますか?
asp.net - ASP.NET でのキャスト エラー
App_Code フォルダーで宣言されたクラスがあります。このクラスには、Portfolio 型を返す public 共有メソッドが含まれています。
このメソッドを呼び出して、ASCX コントロールの 1 つで Portfolio タイプのオブジェクトを初期化しようとすると、「Jaguar.Portfolio タイプの値を Jaguar.Portfolio に変換できません」というメッセージが表示されます。
これは「ウェブサイト」プロジェクトです。CType と DirectCast を使用してみましたが、サイトをビルドしようとすると、同じコンパイル エラーが発生します。
ascx コントロールのコード ビハインド ファイルで、以下にリストされているコード行を使用しています。
java - オブジェクトの配列を目的のクラスの配列にキャストする
レビューのために、誰かがこれが機能しない理由を簡単に説明できますか(コンパイル時):
...そして、これが機能する方法は次のとおりです。
これを可能にするキャスティング(またはそれが何であれ)で機能するメカニズムについては明確ではありません。
java - Javaコンパイラはどのように型キャストを解析しますか?
みたいな簡単な表現
x
が型名であるかどうかによって解釈が異なります。x
が型名でない場合は、から(x) - y
減算するだけです。ただし、が型名の場合は、の否定を計算し、結果の値を type にキャストします。y
x
x
(x) - y
y
x
典型的な C または C++ コンパイラではx
、パーサーが typedef または struct 宣言を処理するとすぐにそのような情報をレクサーに伝達するため、 が型であるかどうかという問題に答えることができます。(このように必要なレベル違反は、C の設計の最も厄介な部分だったと思います。)
ただし、Java ではx
、ソース コードの後半まで定義されない場合があります。Javaコンパイラはどのようにしてそのような式を明確にしますか?
Java は使用前の宣言を必要としないため、Java コンパイラーが複数のパスを必要とすることは明らかです。しかし、これは、最初のパスで式の解析に関して非常に雑な仕事をし、その後のパスで別のより正確な式の解析を行う必要があることを暗示しているようです。それは無駄に思えます。
より良い方法はありますか?
java - Java での「動的」キャスト
みなさん、こんにちは。
以下が機能しない理由を教えてくれるJavaハッカーがいるかどうか疑問に思っています。
コードはコンパイルできますが、実行時に ClassCastException をスローすることにします D=
編集:おっと、本当に迅速な返信。みんなありがとう!したがって、この方法を使用してダウンキャストできないようです... Javaでダウンキャストを行う他の方法はありますか? ChildN
各クラスを上書きすることも考えましcopy()
たが、余分な定型コードを追加することに熱心ではありませんでした。
c++ - 「OLE_HANDLE」から「HICON」にキャストする適切な方法は何ですか?
x64 ターゲット ビルドで 'OLE_HANDLE' から 'HICON' にキャストする適切な方法は何ですか?
特に、通常の C スタイルのキャストでは、x64 構成でコンパイルすると、次の警告が表示されます。
警告 C4312: '型キャスト': 'OLE_HANDLE' からより大きなサイズの 'HICON' への変換
問題のあるコードは次のとおりです。
上記のコードは私にとっては問題なく動作しますが、x64 用にビルドするときの警告を取り除きたいです。
c# - char を unsigned short にキャストする: 舞台裏で何が起こる?
このフィールドを考えると:
そして、この声明:
舞台裏で何が起こっているのですか?
lookup_ext[1669] は 67 = 0100 0011 (C) を返し、lookup_ext[1670] は 78 = 0100 1110 (N) を返し、lookup_ext[1671] は 68 = 0100 0100 (D) を返します。それでも slt[1670] は 18273 = 0100 0111 0110 0001 を返します。
私はこれを C# に移植しようとしているので、簡単な方法以外に、ここで実際に何が起こっているのかも疑問に思っています。C++ を定期的に使用してからしばらく経ちました。
ありがとう!
python - 不明な数の変数にアンパックしますか?
未知のタプルを、たとえばリストに展開するにはどうすればよいでしょうか?
いくつかのデータ列があり、それらはいくつかの関数によってタプルに分割されます。このタプルを変数にアンパックしたいのですが、列数がわかりません。必要な数の変数に動的にアンパックする方法はありますか?
c# - C# - ジェネリックと継承の問題
継承とジェネリックに問題があります。これは私の問題を示すコードです:
そして、私がこのようなことをしようとすると:
キャスト例外が発生しました: 無効なキャスト例外です。「TestApplication.MyClass`1[System.Int32]」を「TestApplication.MyIntClass」にキャストできません。
さらに、キャスト演算子を作成できません:
理由: 'TestApplication.MyIntClass.implicit operator TestApplication.MyIntClass(TestApplication.MyClass)': 基本クラスとの間のユーザー定義の変換は許可されていません
上記のようにキャストを作成する必要があります。基本クラスの型からキャストできない理由がわかりません。どうすればこの問題を解決できますか? 前もって感謝します。
編集
回答ありがとうございます。これで、基本クラスから派生クラスに変換できないことがわかり、ジェネリックとは何の関係もないことがわかりました。しかし、基本クラスからユーザー定義の変換を作成できないのはなぜですか? 基本クラスを返すメソッドがあります。変換方法を定義することはできますが、キャスト演算子 imho を作成する方がより良い解決策になります。
c++ - インターフェイスを使用した動的キャスト
2 つのインターフェイスを実装し、1 つのクラスを継承するクラスがあります。したがって、一般的には次のようになります。
コードには がありますが、IB *
実際には を使用できるポイントが 1 つありA *
ます。私は動的キャストがこれを好むことを望んでいました:
残念ながら、これは機能しません。これを行う適切な方法はありますか?または、回避策を実装する必要がありますか? IB
と の両方をIC
仮想的に継承することを考えましA
たが、前回 IIRC を試してみたところ、いくつかの複雑さが望ましくないことがありました。
何かご意見は?
編集:そうそう、これはプラグイン API の一部であるため、残念ながら、T
必要なタイプに直接アクセスすることはできませんA *
。私の例は隣り合っていますが、前述のように、より複雑です。基本的に、2 つの共有ライブラリがあります。T
とT1
(私が持っている場所IB *
) は両方とも、プラグイン API を実装し、共有ライブラリの内部にあるクラスです。
明確にするために:これは私の典型的なプラグインのより具体的な例です(それらは別々のライブラリにあります):
プラグイン A:
プラグイン B:
編集: 問題は、pluginA と pluginB が異なる共有ライブラリにあることだと思います。おそらく、rtti はモジュールの境界を越えていません。私のテストでは人々の例がうまく機能しているように見えるので、これが当てはまるかもしれないと思います。具体的には、「nm」を実行すると、pluginB には「PluginA の typeinfo」がありません。これが問題の核心かもしれません。この場合は、仮想継承またはcast_to_qobject()
インターフェイスの 1 つで仮想関数を使用して回避する必要があります。