avete alcune opzioni qui
Il primo è quello di utilizzare Object.Equals
:
if(b.Equals(iteratorB)) {
// do stuff
}
Fare attenzione usando questa opzione; se B
non sovrascrive Object.Equals
, il comparsion predefinito è l'uguaglianza di riferimento quando B
è un tipo di riferimento e l'uguaglianza di valore quando B
è un tipo di valore. Questo potrebbe non essere il comportamento che stai cercando ed è il motivo per cui senza ulteriori informazioni considererei una delle prossime due opzioni.
Il secondo è quello di aggiungere un vincolo che B
è IComparable
:
public class WidgetBox<A, B, C> where B : IComparable
modo che
if(b.CompareTo(iteratorB) == 0) {
// do stuff
}
Un terzo è quello di richiedere un IEqualityComparer<B>
essere passato al costruttore di WidgetBox
public class WidgetBox<A, B, C> {
IEqualityComparer<B> _comparer;
public WidgetBox(IEqualityComparer<B> comparer) {
_comparer = comparer;
}
// details elided
}
Quindi:
if(_comparer.Equals(b, iteratorB)) {
// do stuff
}
Con questa ultima opzione è possibile fornire un sovraccarico che il valore predefinito è EqualityComparer<T>.Default
:
public WidgetBox() : this(EqualityComparer<T>.Default) { }
possibile duplicato del [Non può essere operatore == applicato a tipi generici in C#?] (http://stackoverflow.com/questions/390900/cant-operator-be-applied-to-generic-types-in-c) – nawfal