似たような質問を見つけました
類似した特性を持つ 2 つの明確に異なるオブジェクトを比較する方法
それは暗黙のうちに、および/または部分的に私の質問に答えるかもしれません。
このオブジェクトを(多くのネストされた条件なしで)比較したいとします。
class ObjectA {
public string PropertyX { get; set; }
public char PropertyY { get; set; }
public long PropertyZ { get; set; }
}
にSystem.String
。私は平等または不平等にのみ興味があります (アイデンティティに関する値の範囲ではありません)。
での実装IEquatable<string>
は ObjectA
適切な選択ですか? 何がうまくいくかは気にしません。そのような場合の適切なパターンを特定したいと思います。
その他の情報として、 のObjectA
シーケンスとして提供されることが多いと考えてくださいIEnumerable<ObjectA>
。
インスタンスかどう"string"
==
かを知る必要はありません。!=
objectA
ソートは含まれません。
編集して明確にする(そして助ける)
申し訳ありませんが、良い質問を書くのは難しい場合があります...
ObjectA
比較のために文字列として表すことができないとします (カプセル化に違反することはオプションではありません)。
context-1 では、それを と照合する必要があり
PropertyY
ます。PropertyY
context-2 では、 /に適用されるアルゴリズムと照合する必要がありますPropertyZ
。
質問の最後にある@Oliverソリューションは、私を再び助けてくれます(そして再び+1します)。カスタム インターフェイスを簡単に定義できます。
interface IContextConverter {
string ToEquatableStringForContext1();
string ToEquatableStringForContext2();
}
私もObjectB
同じロジックで異なるプロパティを持っているので、両方ともRAPに違反しないように実装しますIContextConverter
(または、より良い名前を見つけることができます) 。