問題タブ [iequatable]

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 投票する
1 に答える
1481 参照

c# - IEqualityComparer の使用に失敗することを除いて、カスタム オブジェクト

オブジェクトコードは次のとおりです。

そして、次の2つのリストがあります。

delItems には常に両方の項目が含まれます。ここで何が欠けていますか?

編集: コードは IEquatable を実装するようになりました

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

c# - リスト内のアイテムを検索するサンプルオブジェクトインスタンスを提供する

なぜ方法があるのにList<T>.Contains(T)方法がないのList<T>.Find(T)ですか?Find述語をサポートするsのみがサポートされます。ListIDのプロパティ値が入力されたTの既存のインスタンスがある場合(ただし、他のプロパティが欠落している場合)、特にカスタムIEquatable<T>を実装Tして使用したい場合は、このオブジェクトインスタンスを検索に提供して検索できないのはなぜですか?何がありますか。しかし、それがそうであるように、私たちはできません。私たちの呼び出しでIEquatable実装で行ったすべてを繰り返す必要があります。Find(predicate)

0 投票する
2 に答える
928 参照

c# - CLRタイプのObject.Equals(objA、objB)、objA.Equals(objB)、およびobjA == objBの違いは?

CLRタイプが次とは異なる結果を返すかどうか疑問に思っています。

私は、CLRの外部で、誰かがIEqualtableEqualsを簡単に実装し、==演算子を不適切にオーバーロードする可能性があることを認識しています。私はこれらを不適切に実装している人々には関心がありません。私が懸念しているのは、クラス(String、Int32などを含む)がこれら3つを異なる方法で実装していることです。

また、可能であれば、全体(全体)の比較に使用するものをどれにする必要があります。Object.Equals(objA, objB)他の2つではなくビューモデル全体を使用するファイルに出くわしたので、これは疑問に思います。

0 投票する
5 に答える
660 参照

c# - IEquatable の実装可変型で

外部物理測定デバイスを表すクラスがあります。簡易版は次のようになります。

Tagデバイスを識別するためのユーザー定義の値です。Addressアダプターがデバイスと通信するために使用する値です。の 2 つのインスタンスがDevice同じAddressである場合、同じ外部測定デバイスが使用されます。

をオーバーライドして実装することにより、コードでその動作を模倣したいと思います(Containsおよびのようなメソッドを使用するため) :DistinctEqualsIEquatable<T>

ご覧のとおりTag、 の実装ではプロパティを無視していますEquals

だから、私の質問は:Tagの実装でプロパティを無視する必要がありEqualsますか? そうすることで、コードが理解しにくくなりますか? 私がやろうとしていることを行うためのより良い方法はありますか? Tagプロパティが必要なのは、多くの場合、ユーザーが を知らない、または が(App.config ファイルで処理されている) を持っているAddressかどうかさえ知らないためです。プロパティがあります)。DeviceAddressIDeviceAddress

アップデート:

回答ありがとうございます。

したがって、カスタムを使用する必要があると思いますIEqualityComparer。私の実際のコードがこのように見える場合、どうすればよいかについてのガイダンスはありますか?

でデバイスの種類を確認する必要がありますIEqualityComparerか?

0 投票する
1 に答える
84 参照

gethashcode - 値クラスに GetHashCode を実装する

クラス Money があり、この値クラスに GetHashCode を実装する最良の方法は、$1 != €1 を与えることになるかを知りたいです。通貨に対して重み付けされた値 * 値を持つことは機能しません。

0 投票する
5 に答える
30839 参照

c# - IEqualityComparerの違いは何ですかおよびIEquatable

IEqualityComparer<T>とを使用する必要があるシナリオを理解したいと思いIEquatable<T>ます。両方のMSDNドキュメントは非常によく似ています。

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

c# - IEquatable はカスケードしますか?

IEquatable に関して非常に単純な質問があります。次の基本クラスがあるとします。

Person オブジェクトと同等かどうかを比較したい場合、どうすればよいでしょうか? Person クラスに IEquatable インターフェイスを実装すると、そのクラス内の任意のオブジェクトに自動的にカスケードされますか?それとも、すべてのクラスにインターフェイスを明示的に実装する必要がありますか?

すべてのクラスにインターフェイスを実装する必要がある場合、Person のインスタンスを Person の別のインスタンスと比較するときに注意すべき特定の「落とし穴」はありますか?

0 投票する
2 に答える
3883 参照

vb.net - IEquatable を正しく実装しましたか? GetHashCode を常にオーバーライドする必要がありますか?

ここで提起された質問を見ました: Equals()/GetHashCode() を正しく実装しましたか? しかし、私の c# はそれほど強力ではなく、IEquatable に慣れていないので、可能であれば VB.NET でこれを見たいと思っています。

私のコード例 (クラスは、そこに到達すると最終的に INotifyPropertyChanged を使用します):

ありがとう、

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

entity-framework-4 - POCO に IEquatable を実装する

EF の DbSet.Add() がかなり遅いことに気付きました。少しグーグルすると、最大180倍のパフォーマンス向上を約束するSOの答えが見つかりました。

https://stackoverflow.com/a/7052504/141172

IEquatable<T>ただし、回答で提案されているように実装する方法が正確にはわかりません。

MSDN によると、 を実装する場合はIEquatable<T>、 と もオーバーライドする必要がありEquals()ますGetHashCode()

多くの POCO と同様に、私のオブジェクトはmutableです。データベースにコミットされる前 ( SaveChanges())、新しいオブジェクトの ID は 0 です。オブジェクトが保存された、ID は IEquatable、Equals()、および GetHashCode() を実装するための理想的な基盤として機能します。

変更可能なプロパティをハッシュ コードに含めることは賢明ではありません。MSDN によると、

2 つのオブジェクトを比較して等しい場合、各オブジェクトの GetHashCode メソッドは同じ値を返す必要があります。

IEquatable<T>プロパティごとの比較 (例: ) として実装し、 this.FirstName == other.FirstNameEquals() と GetHashCode() をオーバーライドする必要はありませんか?

POCO が EntityFramework コンテキストで使用されている場合、Id フィールドに特別な注意を払う必要がありますか?

0 投票する
2 に答える
3101 参照

c# - ジェネリックで NaN をテストする方法 (または NaN.Equals(NaN) == true の理由)?

配列で最小値と最大値を見つける必要があります(この配列で可能なNaN値を考慮していません)。

これは でのみ簡単に作業できますdoubleが、これらの FindMin および FindMax 関数はジェネリック型で作業する必要があります。

この方法で一般的なNaNをテストしようとしました。

しかしEquals、戻っtrueてきますdouble.NaN??!!

今のところ、次のような回避策があります。

私の質問は、最初の解決策が機能しなかった理由を理解することです。これはバグですか?

ここで小さなテストコードを見つけることができます