問題タブ [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.

0 投票する
4 に答える
1808 参照

c# - コンパイラが制約付きジェネリック型の変換に失敗する

ジェネリック型「G」を持つクラスがあります

私のクラスモデルでは

このような方法があるとしましょう

コンパイラは 1 行目に 1 つのエラーを報告します。

しかし、3行目はうまくいきます。5 行目に書かれたコードを実行することで、この問題を回避できます。

私が知りたいのは、コンパイラが 3 行目ではなく 1 行目のエラーを報告する理由です。

編集:フレームワークロジックの重要な部分が欠けているのではないかと心配しています

edit2: コンパイラ エラーの解決策は重要ですが、私の質問は、コンパイラが 3 行目ではなく 1 行目にエラーを報告する理由についてです。

0 投票する
9 に答える
7590 参照

php - PHP マネー文字列の整数への変換エラー

PHP をフロントエンド、MySQL をバックエンドとする小さな金融アプリケーションがあります。私には古くからの偏見があり、通貨の値をセント単位の整数として MySQL に保存しています。私の HTML フォームでは、「156.64」などのドル値を入力できます。PHP を使用してそれをセントに変換し、そのセントをデータベースに保存します。

フォームからドルの値を消去し、セントに変換する関数があります。先頭のテキストを削除し、末尾のテキストを削除し、100 を掛けて整数に変換します。その最後のステップは

$cents = (integer) ($dollars * 100);

これは、一貫して 15663 セントに変換される '156.64' のような非常に少数の値を除いて、ほとんどすべてに対して正常に機能します。なぜこれを行うのですか?

私がこれを行う場合:

$cents = (integer) ($dollars * 100 + 0.5);

その後、一貫して機能します。その丸め値を追加する必要があるのはなぜですか?

また、金額を浮動小数点値ではなく整数として保存することについての私の偏見は、もう必要ありませんか? 最新のフロート計算は、100% 正確な会計を維持するのに十分な、適切に丸められた正確な金額を生成しますか?

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

c# - C#でオブジェクトを適切な型にキャストする方法を決定する最良の方法は?

私は現在、リクエストのルーティング方法を決定する「ルール」をユーザーが作成できる承認ルーティング WCF サービスを開発しています。ルートは、Request クラスの「ObjectToEvaluate」プロパティを「Rule」クラスの「ObjectToEvaluate」プロパティと比較することによって決定されます。「UnitOfMeasurement」列挙型は、各クラスの「ObjectToEvaluate」プロパティをキャストする方法を決定します。

「UnitOfMeasurement」列挙型を使用して「ObjectToEvaluate」プロパティをキャストするメソッドを実装する最良の方法は何でしょうか?

0 投票する
4 に答える
701 参照

c++ - クラス演算子のみでキャストする方法はありますか?

ランダムな質問のようなもの...

私が探しているのは、キャスト元のクラス インスタンスの定義済み演算子を使用するキャスト操作を表現する方法であり、型に定義済みキャスト演算子がない場合はコンパイル時エラーを生成します。たとえば、私が探しているのは次のようなものです。

興味深い補足: 上記のコードは VS2005 C++ コンパイラをクラッシュさせ、VS2008 C++ コンパイラでは正しくコンパイルされません。これは、コンパイラのバグであると推測していますが、うまくいけばアイデアを示しています。

この効果を達成する方法を知っている人はいますか?

編集:これを使用する理由を説明するためのより多くの理論的根拠。型をカプセル化または抽象化することになっているラッパー クラスがあり、それをカプセル化された型にキャストしているとします。static_cast<> を使用することもできますが、失敗させたい場合に機能する可能性があります (つまり、コンパイラーは、要求した型に変換できる演算子を選択します。その演算子が存在しないために失敗したい場合)。

確かに、これはまれなケースですが、カプセル化された関数でコンパイラに実行してもらいたいことを正確に表現できないのは面倒です...したがって、ここで質問します。

0 投票する
6 に答える
31026 参照

c# - 'System.Object[]' 型のオブジェクトを 'MyObject[]' にキャストできません。

シナリオ:

私は現在、3 つの類似した Web サービスを 1 つの使用可能なクラスに抽象化するレイヤーを作成しています。各 Web サービスは、共通性を共有する一連のオブジェクトを公開します。共通性を利用する一連の中間オブジェクトを作成しました。ただし、レイヤーでは、Web サービス オブジェクトとオブジェクトの間で変換する必要があります。

次のように Web サービスを呼び出す前に、実行時にリフレクションを使用して適切な型を作成しました。

私のサービス実装の1つからの私の呼び出しコードは次のとおりです。

したがって、各サービスは、独自の IProperty インターフェイスの実装の背後に隠している、異なる「Property」オブジェクトを公開します。

リフレクション コードは単体テストで機能し、適切な型の要素を持つオブジェクトの配列を生成します。しかし、呼び出しコードは失敗します:

System.InvalidCastException: タイプ 'System.Object[]' のオブジェクトをタイプ 'MyProject.Property[] にキャストできません

何か案は?

含まれているオブジェクトが変換可能である限り、オブジェクトからのキャストは機能するという印象を受けましたか?

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

c# - オブジェクトをジェネリックインターフェイスにキャストする

私は次のインターフェースを持っています:

そして、それを実装する(すべき)クラスの束。

私はこれらの3つが同じではないことを理解しています:

それでも、すべてIRelativeToを実装する必要があるAdminRateShift(およびFXRateShift、DetRateShift)などのさまざまなクラスすべてを操作する方法が必要です。AdminRateShiftをオブジェクトとして返す関数があるとしましょう。

インターフェイスに対してプログラミングすることで、必要なことを実行できますが、実際にはオブジェクトをIRelativeToにキャストできないため、使用できます。

些細な例ですが、私がやろうとしていることを明確にしてくれることを願っています。

0 投票する
6 に答える
9703 参照

c# - C#で矩形配列から1次元配列を抽出する最良の方法は何ですか?

ギザギザの配列ではなく、長方形の文字列配列があるとします

これから1次元配列(単一行または単一列)を抽出する最良の方法は何ですか? もちろん、これは for ループで実行できますが、.NET にもっと洗練された方法が組み込まれていることを願っています。

抽出された文字列配列をオブジェクト配列に変換するためのボーナス ポイント。

0 投票する
8 に答える
369143 参照

php - PHPで文字列を整数に変換する最速の方法

"123"PHPを使用して、次のような文字列を整数に変換する最も速い方法は何ですか?

その特定の方法が最速なのはなぜですか?"hello"または配列などの予期しない入力を受け取った場合はどうなりますか?

0 投票する
8 に答える
1095 参照

c++ - プログラムによるC++キャスト:それはできますか?

基本クラスといくつかの派生クラスがあるとしましょう。次のようなものを書く必要なく、派生クラスの 1 つにオブジェクトをキャストする方法はありますか?

0 投票する
4 に答える
3894 参照

c# - オブジェクト型に「ref」および/または「out」を使用する

私は .Net 1.1 アプリケーションに行き詰まっており (つまり、今のところ 2.0 のジェネリック機能を使用できません)、コードの一部を最適化しようとしていました。リリースする必要があるランタイム呼び出し可能なラッパーを多く扱うため、すべての参照がリリースされるまでループするユーティリティ メソッドを作成することになりました。メソッドのシグネチャは次のとおりです。

すべての comObjects を解放した後、GC.Collect と GC.WaitForPendingFinalizers を呼び出します (質問しないでください - Office の相互運用を扱っている人なら誰でも知っています)。

そして ... いつものように、まれなケースに遭遇します。GC.Collect 呼び出しの前に、対応するマネージド参照を null に割り当てないと、適切にクリーンアップされません。

したがって、私のコードは次のようになります。

xxx=null がたくさんあるので、これを util メソッドに入れることにしましたが、参照渡しと参照パラメーターの受け渡しには違いがあるため、明らかにメソッドを次のように変更する必要がありました。

呼び出し元を次のように編集します。

これは、「'out MyComClass' から 'out object' に変換できません」というメッセージで失敗します。

なぜそれが問題になるのか (つまり、オブジェクトから MyComClass へのリバース キャストは暗黙的ではなく、メソッドが何を行うか保証されていない) を考えることはできますが、回避策があるかどうかは疑問に思っていました。私の何百ものヌルの割り当てで。

注: 私はさまざまな COM オブジェクト タイプを持っているため、タイプ セーフではなく「オブジェクト」パラメータが必要です。