tag estructuras condicionales c# struct equality

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); }