usted tiene algunas opciones aquí
La primera es utilizar Object.Equals
:
if(b.Equals(iteratorB)) {
// do stuff
}
Tenga cuidado al usar esta opción; si B
no anula Object.Equals
, la comparación por defecto es igualdad de referencia cuando B
es un tipo de referencia e igualdad de valor cuando B
es un tipo de valor. Puede que este no sea el comportamiento que está buscando y es por eso que sin información adicional consideraría una de las siguientes dos opciones.
El segundo es añadir una restricción que B
es IComparable
:
public class WidgetBox<A, B, C> where B : IComparable
para que
if(b.CompareTo(iteratorB) == 0) {
// do stuff
}
Una tercera es para requerir una IEqualityComparer<B>
ser pasado al constructor de WidgetBox
public class WidgetBox<A, B, C> {
IEqualityComparer<B> _comparer;
public WidgetBox(IEqualityComparer<B> comparer) {
_comparer = comparer;
}
// details elided
}
Luego:
if(_comparer.Equals(b, iteratorB)) {
// do stuff
}
Con esta última opción puede proporcionar una sobrecarga que por defecto es EqualityComparer<T>.Default
:
public WidgetBox() : this(EqualityComparer<T>.Default) { }
posible duplicado de [Puede no ser operador == aplicado a los tipos genéricos en C#?] (http://stackoverflow.com/questions/390900/cant-operator-be-applied-to-generic-types-in-c) – nawfal