問題タブ [equals-operator]
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# - 平等が適切に機能することを保証するために、構造体で何をオーバーライドする必要がありますか?
==
タイトルにあるように、演算子をオーバーライドする必要がありますか?方法はどう.Equals()
ですか?足りないものはありますか?
c# - C#のクラスに==演算子を実装するためのベストプラクティスは何ですか?
オペレーターを実装し==
ていると、いくつかの重要なポイントが欠けているような気がします。
したがって、私はその周りのいくつかのベストプラクティスを探しています。
これが私が考えているいくつかの関連する質問です:
- 参照比較をきれいに処理する方法は?
IEquatable<T>
のようなインターフェイスを介して実装する必要がありますか?またはオーバーライドしますobject.Equals
か?- そして、
!=
オペレーターはどうですか?
(このリストは網羅的ではないかもしれません)。
c# - ==演算子をオーバーロードする必要がありますか?
==
オペレーターは実際にC#でどのように機能しますか?クラスAのオブジェクトを比較するために使用された場合、 Aのすべてのプロパティを一致させようとしますか、それとも同じメモリ位置(または他の何か)へのポインタを探しますか?
架空の例を作成しましょう。Twitter APIを利用するアプリケーションを作成しています。このアプリケーションには、Tweetクラスがあり、テキスト、送信者、日付と時刻、ソースなど、単一のツイートのすべてのプロパティがあります。クラスTweetのオブジェクトを比較して同等性を確認する場合、私はただ使うことができます:
それは、 aとbの間のTweetクラスのすべてのプロパティの同等性をチェックしますか?
そうでない場合、正しいアプローチは==
、すべてのフィールドの同等性を明示的にチェックするために演算子をオーバーロードすることですか?
更新:最初の2つの答えから、私は次のように仮定するのが正しいですか?
==
演算子またはEqualsメソッドがクラスに対してオーバーロードされていない場合、オブジェクト==
クラスの演算子が使用されます。- オブジェクトクラスの
==
演算子は、メモリ位置が等しいかどうかをチェックします。 - このタスクを実行するには、
==
演算子またはEqualsメソッドをオーバーロードする必要があります。 - オーバーロードでは、プロパティの等価性を手動でチェックする必要があるため、半自動で、たとえばループでそれを行う方法はありません。
更新#2: Yuriyは、リフレクション==
を使用して演算子のプロパティの等価性をチェックできるとコメントしました。これはどのように行うことができますか?サンプルコードを教えてください。ありがとう!
c++ - C++での派生クラスの同等性テスト
C ++では、派生クラスはどのようにして基本クラスの同等性テストを意味のある方法でオーバーライドできますか?
たとえば、基本クラスAがあるとします。クラスBとCはAから派生します。2つのAオブジェクトへの2つのポインターが与えられた場合、それらが等しいかどうかをテストできますか(サブクラスデータを含む)?
それを行うためのクリーンな方法はありますか?私の最善の策は何ですか?
ありがとう!
c++ - 演算子の問題 ==
次の C++ プログラムで operator == を使用すると、問題が発生します。
行の何が問題になっていif(obj1 == A("test1"))
ますか?? どんな助けでも大歓迎です。
c++ - 派生クラスの Operator== が呼び出されることはありません
誰かがこれで私を悲惨な状態から救ってくれませんか? 派生した operator== がループで呼び出されない理由を理解しようとしています。例を単純化するために、ここに私の Base クラスと Derived クラスを示します。
このようにインスタンス化して比較すると...
... すべて良好。ここで Derived の operator== が呼び出されますが、リストをループすると、ポインタのリスト内の項目が Base オブジェクトに比較されます ...
ここasString()
(これは仮想であり、簡潔にするためにここには示していません) は正常に動作しますが、2 つのオブジェクトが であってもobj1 == obj2
常に を呼び出します。Base
operator==
Derived
何が悪いのか分かったら自分を蹴ってしまうことはわかっていますが、誰かが私を優しく失望させてくれるなら、それは大歓迎です.
c++ - 同じ'if'条件の2つの'=='等式演算子が意図したとおりに機能していません
3つの等しい変数の同等性を確立しようとしていますが、次のコードは、出力する必要がある明らかな正解を出力していません。if(condition)
誰かが、コンパイラが与えられたものを内部でどのように解析しているのか説明できますか?
出力:
編集:
以下の答えを見て、次のステートメントは上記の同等性をチェックしても大丈夫ですか?
java - Java でのブール値テストが常に失敗するのはなぜですか?
タイヤ空気圧の 1 つが 35 未満または 45 を超えると、システムが「悪い膨張」を出力するように、ブール値のテストを作成しようとしています。
私のクラスでは、私が試したブール値を使用する必要があります。ただし、返されるブール値は常に true です。理由がわかりません。
c# - 「==演算子が定義されていない」場合はどうなりますか?
「==演算子が定義されていない」場合はどうなりますか?
例:
構造体を扱うときは違いますか?
マーシャリングされた ( System.Runtime.Remoting.*
) オブジェクト (シングルトン) はどうですか?
c# - ディクショナリ キーには、キーに既に含まれているキーは含まれません
次の「存在する」ブール変数の値がfalseになるのはなぜですか???
GetHashCode() & Equals() メソッドを次のようにオーバーライドしました。