Оператор implicit
работает только для назначения.
Вы хотите перегрузить оператор равенства (==
), например:
class a
{
public static bool operator ==(a x, b y)
{
return x == y.a;
}
public static bool operator !=(a x, b y)
{
return !(x == y);
}
}
class b
{
public a a{get;set;}
public static implicit operator a(b b)
{
return b.a;
}
}
Это должно позволить вам сравнить два объекта типа a
и b
, как предлагается в вашем посте.
var x = new a();
var y = new b();
bool c = (x == y); // compiles
Примечание:
Я рекомендую просто переопределить метод GetHashCode
и Equals
, как предупреждает компилятор, но, как вы, похоже, хотите их подавить, вы можете сделать это следующим образом.
Измените объявление класса a
на:
#pragma warning disable 0660, 0661
class a
#pragma warning restore 0660, 0661
{
// ...
}