No puede restringir a los operadores, pero puede restringir a las interfaces. Por lo tanto, está intentando utilizar >=, <=, ==
, pero puede usar CompareTo, Equals
.
where T : IComparable<T>
Interface documentation
Esta interfaz le trae el método CompareTo
, que es útil para el pedido relacional (mayor que, menor que, etc.). Los primitivos y las cadenas implementan esto ya, pero necesitaría implementar esto para sus propios tipos personalizados. Se podría utilizar de esta manera
void SomeMethod<T>(T alpha, T beta) where T : IComparable<T>
{
if (alpha.CompareTo(beta) > 0)
{
// alpha is greater than beta, replaces alpha > beta
}
else if (alpha.CompareTo(beta) < 0)
{
// alpha is less than beta, replaces alpha < beta
}
else
{
// CompareTo returns 0, alpha equals beta
}
}
Equals
se obtiene por defecto como un método virtual en object
. Desea anular este método en sus propios tipos personalizados si desea usar algo diferente a la igualdad referencial. (También se recomienda fuertemente para anular GetHashCode
al mismo tiempo.)
IComparable no tiene el método de igual a igual, eso es IEquatable –
@ Nathan, estás en lo correcto, pero 'Equals' es un método virtual en objetos por defecto, así que no mencioné la interfaz en la respuesta. Se actualizará para mayor claridad. –
Lo hice, pero ahora obtengo el error 'operator
rohit89