問題タブ [iequalitycomparer]

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 に答える
213 参照

iequalitycomparer - IEqualityComparerインターフェイスにGetHashcode()が必要なのはなぜですか?

IEqualityComparerインターフェイスにEquals(obj x、obj y)とGetHashcode()があることがわかります。

2つのことが同じかどうかを言わなければならないので、Equals()メソッドを完全に理解していますが、なぜGetHashCode()メソッドも実装する必要があるのですか?

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

c# - if ステートメントと関数の呼び出しのどちらが速いですか?

私は興味深いプログラムを書いています。関数呼び出しの数を減らすために追加の「if」ステートメントを作成するか、それらの「if」を回避してより多くの関数呼び出しを取得するか、何が良いのか疑問に思っています。この関数は、IEqualityComparer のメソッド Equals をオーバーライドする仮想メソッドであり、2 つのファイルのサイズとハッシュを比較するだけです。if ステートメントは、これら 2 つのファイルのサイズを比較します。私はあなたがこの論理の要点を得たと思います。ご覧のとおり、私はこのプログラムを C# で書いています。何を選ぶべきか迷っているのはこれが初めてではないので、誰でも答えられるかもしれません。ありがとう

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

.net - IStructuralEquatable と IStructuralComparable はどのような問題を解決しますか?

これら 2 つのインターフェイスと、関連するいくつかのクラスが .NET 4 に追加されていることに気付きました。それらに関するいくつかのブログを読んだことがありますが、.NET 4 より前では困難だった、どのような問題を解決するのかまだわかりません。

IStructuralEquatableとは何に使うのIStructuralComparableですか?

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

c# - リフレクションを使用した比較演算子

リフレクションを使用して、実行時に2つの値を比較したいと思います。これにはComparer.Default.Compare(x、y)を使用していましたが、これでは不十分であることに気付きました。ダブルとシングルを比較したいとしましょう(1.0 == 10)。Comparer.Defaultは、両方の値が同じタイプ(double)でなければならないと主張するため、例外をスローします。ただし、これには明示的な変換が存在します。これは、実際に使用したいものです。

では、なぜConvert.ChangeTypeだけを使用できないのでしょうか。1.25> 1(double> integer)の場合を考えてみましょう。1.25でConvert.ChangeType(1.25、typeof(int))を試してみると、1が得られ、実際に1.25 IS> 1の場合、上記のアサーションは失敗します。

それで、誰かがタイプが定義する明示的な比較(存在する場合)を呼び出す方法を提案できますか?

ありがとう。

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

c# - IEqualityComparerでのGetHashCodeの役割は何ですか.NETで?

IEqualityComparerインターフェイスのGetHashCodeメソッドの役割を理解しようとしています。

次の例はMSDNから抜粋したものです。

Equalsメソッドの実装は、2つのBoxオブジェクトを比較するのに十分ではありませんか?ここで、オブジェクトの比較に使用されるルールをフレームワークに通知します。GetHashCodeが必要なのはなぜですか?

ありがとう。

ルシアン

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

c# - データベースから「同一の」複合オブジェクトを取得する

「Car」オブジェクトを含む「Cars」という LINQ to SQL のテーブルがあります。

各 Car には EngineID と ColourID があります。

メモリ内に新しいローカル Car オブジェクトを作成しました (まだデータベースにコミットしていません)。

私はすでに .Contains と組み合わせてうまく機能する IEqualityComparer を書いています。

しかし、それはブール値を返します..

どの車が同一であるかを実際に取得するにはどうすればよいですか..?

たとえば、次のようなものが欲しい..

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

c# - IEqualityComparer 実装を抽象化するか、デフォルトの比較子をオーバーライドして Distinct メソッドを使用します

それぞれがプロパティを持っている場所をList<Author>指定して、個別のものを見つけようとしています。ジェネリックで拡張メソッドを見つけたので、それを使用しようとしています。最初に、ループとそれを使用する場所について説明し、次にクラスと問題のある場所について説明します。List<BlogPost>BlogPostAuthorDistinct()

ここでdistinctを使用しようとしています

MSDNで読んだ内容に基づいてDistinct()、デフォルトの比較子または渡された比較子を使用します。私は(これが実行可能かどうかは明らかにわかりません)比較子を1つの場所に記述し、すべてのクラスでまったく同じ等値演算(GUIDそれぞれのプロパティを比較する)で比較するため、それをすべてのクラスで使用できるようにすることを望んでいましたクラス)。

私のクラスはすべてクラスから継承しますBasePage

に実装された私の equals メソッドは、それぞれに固有BasePageのプロパティを比較します。GUID私が電話をかけたときDistinct()Authorそれはうまくいかないようです。class AuhorComparer : IEqualityComparer<Auhor>使用するたびにクラスごとに同じことを書く必要があるため、比較子を1か所にまとめて、常に使用できるようにする方法はありますかDistinct()? または、デフォルトの比較子を何らかの方法でオーバーライドして、何も渡す必要がないようにすることはできますDistinct()か?

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

c# - .net でのオブジェクトの比較

で使用するプロパティの演算子を実装することIEqualityComparerとオーバーライドすることは、CLR の観点から何か違いがありますか? もしそうなら、いつ一方を他方に対して使用しますか?==IEqualityComparer<T>

編集

わかりました、IEqaulityComparer が Hashtable の実装で使用されていることは理にかなっています。質問を投稿しているときに、それが頭から離れました。では、IEnumerable の Linq の拡張についてはどうでしょうか。このような拡張メソッドを実行すると、.net が Hashtable を作成するということですか?

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

linq - 単一の比較クラス (およびインターフェイス) を持つ Linq Distinct

アプリケーションにいくつかのクラスがあり、そのすべてに、Name比較の基礎として使用したいプロパティ (Distinct()など) があります。私は常に を比較するつもりなので、他のすべてのクラスが実装するプロパティを単に持っているNameインターフェース を抽出することにしました。比較クラスを次のように設定しました。ISomeComparedStuffName

唯一の問題は、それに対してコーディングしようとするときです。

キャスト エラー ( SomeStuffto ISomeComparedStuff) が発生します。これを行う方法はあるので、必要な比較クラスは 1 つだけNameです。

注: この質問「タイトル」に助けが必要であることは理解しています。どんな提案も素晴らしいでしょう。

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

.net - .NET 4.0 を対象とするアプリで IEqualityComparer を使用する場合

インターフェイスIEqualityComparerに加えて、弱く型付けされた .NET 4.0 アプリを実装する利点はありますか?IEqualityComparer<T>

IEqualityComparer<System.Object>もう 1 つの角度は、同じように弱く型付けされたシナリオを構成するためにいつでも実装できIEqualityComparer、新しいコードに頼る必要がないことです。