C# で等号 (==) を使用して 2 つの構造体を比較しようとしています。私の構造体は以下の通りです:
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();
}
}
クラスのプロパティとして構造体を使用しようとしていますが、先に進む前に構造体が割り当てようとしている値と等しいかどうかを確認したいので、プロパティを示していません次のように、変更されていないときに変更されました。
public CisSettings TopCisSettings
{
get { return _topCisSettings; }
set
{
if (_topCisSettings == value)
{
return;
}
_topCisSettings = value;
OnPropertyChanged("TopCisSettings");
}
}
ただし、等しいかどうかを確認する行で、次のエラーが発生します。
演算子「==」は、タイプ「CisSettings」および「CisSettings」のオペランドには適用できません
なぜこれが起こっているのかわかりません。誰かが私を正しい方向に向けることができますか?