tag - estructuras condicionales en c#
Comparando dos estructuras usando== (6)
Cuando anula el método .Equals, el operador ==
no se sobrecarga automáticamente. Necesitas hacer eso explícitamente.
Consulte también Pautas para anular Iguales () y Operador == .
Estoy tratando de comparar dos estructuras usando iguales (==) en C #. Mi estructura está abajo:
public struct CisSettings : IEquatable<CisSettings>
{
public int Gain { get; private set; }
public int Offset { get; private set; }
public int Bright { get; private set; }
public int Contrast { get; private set; }
public CisSettings(int gain, int offset, int bright, int contrast) : this()
{
Gain = gain;
Offset = offset;
Bright = bright;
Contrast = contrast;
}
public bool Equals(CisSettings other)
{
return Equals(other, this);
}
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
var objectToCompareWith = (CisSettings) obj;
return objectToCompareWith.Bright == Bright && objectToCompareWith.Contrast == Contrast &&
objectToCompareWith.Gain == Gain && objectToCompareWith.Offset == Offset;
}
public override int GetHashCode()
{
var calculation = Gain + Offset + Bright + Contrast;
return calculation.GetHashCode();
}
}
Estoy tratando de tener struct como propiedad en mi clase, y quiero verificar si la estructura es igual al valor que estoy tratando de asignar, antes de seguir adelante y hacerlo, así que no estoy indicando la propiedad ha cambiado cuando no lo ha hecho, así:
public CisSettings TopCisSettings
{
get { return _topCisSettings; }
set
{
if (_topCisSettings == value)
{
return;
}
_topCisSettings = value;
OnPropertyChanged("TopCisSettings");
}
}
Sin embargo, en la línea donde reviso la igualdad, obtengo este error:
El operador ''=='' no se puede aplicar a operandos del tipo ''CisSettings'' y ''CisSettings''
No puedo entender por qué sucede esto, ¿podría alguien señalarme la dirección correcta?
Debe sobrecargar su operador de alguna manera como esta:
public static bool operator ==(CisSettings a, CisSettings b)
{
return a.Equals(b);
}
Necesita anular operador == explícitamente.
public static bool operator ==(CisSettings x, CisSettings y)
{
return x.Equals(y);
}
Por cierto, será mejor que coloques el código de comparación en public bool Equals(CisSettings other)
, y deja que bool Equals(object obj)
bool Equals(CisSettings other)
, para que puedas obtener un cierto rendimiento evitando la verificación de tipo innecesaria.
Necesita sobrecargar los operadores ==
y !=
. Agregue esto a su struct
:
public static bool operator ==(CisSettings c1, CisSettings c2)
{
return c1.Equals(c2);
}
public static bool operator !=(CisSettings c1, CisSettings c2)
{
return !c1.Equals(c2);
}
No implementa explícitamente un operador de igualdad , por lo que ==
no está definido particularmente para el tipo.
debe sobrecargar el operador "==", pero también sobrecargar el operador "! =". ( Mira esta nota )
Para el operador de sobrecarga, vea esta página