List<T>
のContains
メソッドをオーバーライドするにはどうすればいいですか?T
は自分のカスタムタイプですか?.NET汎用リストをオーバーライド<MyType> .Contains(MyTypeInstance)?
答えて
に動作しますが含まれています。そうすれば、あなたのクラスはIListのように見えます。あなたは標準のものを行うために内部的に本当のリストを持つことができます。
class MyTypeList : IList<MyType>
{
private List<MyType> internalList = new ...;
public bool Contains(MyType instance)
{
}
....
}
クラス内でEquals
とGetHashCode
を無効にする必要があります(MyType
)。
あなたの対等にカスタムタイプを実装する場合は、リストの機能は、独自のは、あなたがIListインターフェイスを実装するクラスを作成することができ、実装が含まれていることを確認するには
いいえ、リスト
しかし、それはdownvoteに値するとは思わない。等しいは真です; @(1) –
List<T>
比較を行うためにEqualityComparer<T>.Default
を使用しています。まず、オブジェクトがIEquatable<T>
を実装しているかどうかを確認します。そうでない場合はobject.Equals
が使用されます。
So;最も簡単な方法は、Equals
(常にGetHashCode
を更新してEquals
のロジックに一致させる)です。また、代わりにLINQを使用します。
bool hasValue = list.Any(x => x.Foo == someValue);
@Marc Gravell:プロパティとフィールドだけを含む2つのカスタムクラスの「等価性」をテストしたい場合は、クラスにIEquatableを実装する必要がありますか?フィールドが各クラスに同じ値を含んでいたからといって、2つのクラスが「等しい」とみなされるという前提を立てたとき、私は本当に疲れていたに違いない。 :/ ...チップのおかげで); – IAbstract
@Marc Gravell:まあ、技術的には、それが何を含むかは関係ありません。重要なのは、IEquatable
@dboarman - 正確に。あなたの最初のポイントは、IIRCは* do *のように動作するので、あなたは100万マイルも離れていませんでした。 –
をあなたはそれを行うためにLINQの式を使用する場合がありますオーバーライドを持っている必要があるか、特定の依存:
list.Any(x => x.Name.Equals("asdas", .....)) // whatever comparison you need
あなたはその後、便宜のために拡張メソッドでそれをラップすることができます。
- 1. ItemContainerStyleオーバーライド汎用スタイル
- 2. FluentNHibernateオーバーライド汎用クラス
- 3. 汎用.Netプロデューサ/コンシューマ
- 4. 汎用タイプの汎用リストの作成
- 5. Kotlin:サブタイプ内の汎用プロパティをオーバーライド
- 6. .Net:オブジェクトの汎用リストをDataSetに変換する
- 7. 汎用リストのプロパティ値のループ<T>
- 8. リスト<? extends MyType>
- 9. C#の汎用オブジェクトのリスト
- 10. リスト要素の汎用クラス
- 11. protobuf-netで汎用ツリーをシリアライズ
- 12. 汎用リストを返す関数
- 13. SelectListaに汎用リストを渡す
- 14. 汎用リストをJSPタグに渡す
- 15. .NET:汎用ディクショナリのソート方法
- 16. 同じクラスのオブジェクトで汎用リスト<>をフィルタリングするには
- 17. .NETメンバーシップログインReturnUrlオーバーライド
- 18. プリミティブ配列と汎用リストの比較
- 19. 汎用リストの動的ソート基準
- 20. Java方法:汎用リストの作成?
- 21. 汎用オブジェクトの一般的なリスト
- 22. TがEnumerableである汎用インターフェイスの拡張メソッド<K>
- 23. .NET抽象オーバーライド癖
- 24. Containsを使用してリスト<T>にオブジェクトのプロパティを見つける方法はありますか?
- 25. 一覧<object> .Contains式ツリー
- 26. 非汎用メソッド(汎用<Base> [] args)を呼び出し、汎用<Derived>の配列を渡しますか?
- 27. ASP .NET MVC 3:EditorTemplateで汎用ビューモデルを使用する方法
- 28. .NET WebBrowserをオーバーライドするWndProc
- 29. .netアプリケーションのNumberFormatをオーバーライドcultureInfo
- 30. 使用.Contains()EF 6
あなたの質問から、あなたが達成する必要があるのは少し不明です。あなたはa)標準を必要としますか?あなたのカスタムタイプを扱うために含まれていますか?b)Containsが呼び出されたときに特別なロジックをしますか? –
Peter、基本的にはリスト私は実行時にメモリにないので、OODBMSには弱く/弱い参照があります。私がネイティブの.netを実行すると、リストに含まれています。これは、oodbmsバックエンドからリスト全体を取得し、ローカルで評価します。したがって、私は正しい(バックエンド)クエリ構文でそれを上書きしたいと思っていました。 –
@Jörg - そのことを念頭に置いて、Equals/GetHashCodeをオーバーライドするとどのように問題を解決できますか? –