問題タブ [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.
c# - Distinct()をカスタムオブジェクトのコレクションと連携させるにはどうすればよいですか?
この投稿の提案に従って、コードでDistinct()を機能させようとしましたが、まだ問題があります。これが私が扱っている2つのオブジェクトです:
私の目標は、InvoiceItemsオブジェクト(これを呼びますaBunchOfInvoiceItems)に数千InvoiceItemのオブジェクトを追加してから、次のことを行うことです。
このコードを設定して実行すると、次のようなエラーが発生します
タイプ「System.Collections.Generic.IEnumerable」を「InvoiceReader.Form1.InvoiceItems」に暗黙的に変換することはできません。明示的な変換が存在します(キャストがありませんか?)
これを修正する方法がわかりません。別のアプローチを取るべきですか?どんな提案でも大歓迎です。
c# - 私のクラスのC#ジェネリックリストには、私のインスタンスを見つけられないメソッドが含まれています
CMS 用にいくつかのクラスが用意されており、一般的なリストにアイテムが含まれているかどうかを確認できるように、平等を機能させようとしています。以下に示すいくつかの継承レイヤーがあります。その下に、私の予想に反して動作するサンプル コードをいくつか示します。私が何か間違ったことをしているのを見たら、私に知らせてください。関連する部分を示すために、以下の例を縮小しました。私の実際のクラスははるかに大きいですが、これがあなたが見る必要があるすべてだと思います.
IBaseTemplate.cs
BasePage.cs
LandingPage.cs
SamplePage.aspx.cs
からの継承されたメソッドは異なるインスタンスであっても、必要に応じてそれらのプロパティを比較するためcoll.Contains(p4)、返されることを期待しています。ここで何か見逃しましたか?truep1p4EqualsBasePageGUIDIBaseTemplate
List(T) の Contains メソッドのドキュメントを見て、IEquatable<T>.Equalswhere Tisを実装していIBaseTemplateます。
linq - 単一の比較クラス (およびインターフェイス) を持つ Linq Distinct
アプリケーションにいくつかのクラスがあり、そのすべてに、Name比較の基礎として使用したいプロパティ (Distinct()など) があります。私は常に を比較するつもりなので、他のすべてのクラスが実装するプロパティを単に持っているNameインターフェース を抽出することにしました。比較クラスを次のように設定しました。ISomeComparedStuffName
唯一の問題は、それに対してコーディングしようとするときです。
キャスト エラー ( SomeStuffto ISomeComparedStuff) が発生します。これを行う方法はあるので、必要な比較クラスは 1 つだけNameです。
注: この質問「タイトル」に助けが必要であることは理解しています。どんな提案も素晴らしいでしょう。
c# - IEquatableで実装はリファレンスチェックが必要
私は実装するクラスを持っていますIEquatable<T>。参照チェックインを行う必要がありますか、それともEquals()フレームワークで処理されますか?
上記の例では、this==otherステートメントは余分ですか、それとも必要ですか?
更新 1
次のようにコードを修正する必要があることを理解しています。
返信ありがとうございます。
c# - Linq.Except関数「少なくとも1つのオブジェクトがIComparableを実装する必要があります。」
基本的に私はIEquatableを実装するコンテナを持っています(以下に示すサンプル)
IEquatableも実装するCustomClass
これはすべて正常に機能しているため、たとえば、次のように機能します
このコードの後、列挙されたときのdiffとdiff2の両方に期待される結果が含まれています。しかし、私がそれから試してみるなら
例外リストを列挙しようとすると、「少なくとも1つのオブジェクトがIComparableを実装する必要があります。」というメッセージが表示されます。上記の作業例のものとのoldCustomとnewCustomの唯一の違いは、それらが入力される方法です。なぜこれが起こっているのか誰かが知っていますか?
c# - オブジェクト(タイプ)を比較すると、特定のクラスのIEquatableを使用していますか?
Object私のメソッドは、両方ともタイプの2つのパラメーターを受け取ります。それらは同じタイプで、を実装しIEquatableます。
私の質問は次param1 == param2のとおりです。フレームワークIEquatableは特定のクラスの演算子オーバーライドを使用しobject.Equalsて比較しますか、それとも2つのオブジェクトのメモリポインターを比較するだけのフレームワークを使用しますか?
これを行うための最良の方法はどれですか?ジェネリックスと派生の制約がありますか?
c# - collections.Contains(T) メソッド
私がSystem.Collections.Generic書いたクラスのインスタンスを含む を使用しています。
.Containsコレクションメソッドが を使用すること、またはインターフェイスからのメソッドobject.Equals()の実装を読んだことがあります。Equals()IEquatable
オブジェクト メソッドをオーバーライドし、インターフェイスから実装しました。ただし、Queue.Contains(instance)常に false を返します。私は何を間違っていますか?
例えば...
fooInstance2 は常にキューに追加されます。実際、これをデバッガーで実行すると、Equals の実装に到達することはありません。
私は何を間違っていますか?
c# - 型のオブジェクトの複数のプロパティの動的同等性チェック
私は次のようなタイプを持っています:
IEquatable<T>このタイプの 2 つのオブジェクトが同じかどうかを確認するインターフェイスを実装しました。現在のEqualsメソッドは次のようになります。
しかし、上記のように比較チェック用のコードを明示的に記述せずに、既存のすべてのプロパティ (またはこのタイプの特定のプロパティ) の等価性を動的にチェックするように、このメソッドを実装したいと考えています。
私の質問を明確に表現できたことを願っています。:)
ありがとう!
c# - インターフェイスで==演算子をオーバーロードできますか?
私はこのようなインターフェースを持っています:
そして私はIFooを実装する複数のクラスを持っています。
ReferenceEqualityに基づいてではなく、同等性をチェックしたいのですが、AとBの両方が同じである場合、2つのIFooは等しいと見なす必要があります(実際には、WCFを介して送信されるKey-Valueペアのコレクションをチェックしているため、 ReferenceEqualityはありません)。
今私が持っている場合:
現在IFooはIEquatable<IFoo>であるため、FooBar1とFooBar2はオーバーライドしますがEquals(IFoo other)、これは==で呼び出されるものではありません。私は自分のコードを探し回っa==bてa.Equals(b)どこにでも置き換えようとしていますが、それは良くありません。
私に何ができる?
c# - オブジェクトの識別子が null の場合、GetHashCode は何を返す必要がありますか?
ID プロパティが null になる可能性があることを考えると、次のうちどれが正しい/より良いものですか。
また
更新 1: 2 番目のオプションを更新しました。
更新 2: 以下は Equals の実装です。
そしてIDはstring型です。