Код: Выделить всё
System.Threading.Interlocked.CompareExchangeОператор
Например, int i = 5; Interlocked.CompareExchange(ref i, 10, 5); После этой команды int i будет иметь значение = 10. Кроме того, сравнение и обмен происходят атомарно (одна операция).
Когда я попытался использовать это с экземпляром класса, сравнение завершилось неудачей и значения не обменялись.
Код: Выделить всё
public class X
{
public int y;
public X(int val) { y = val; }
}
Код: Выделить всё
X a = new X(1);
X b = new X(1);
X c = new X(2);
Interlocked.CompareExchange(ref a, c, b);
Код: Выделить всё
public override bool Equals(object obj) { return y == ((X) obj).y; }
Есть ли какой-нибудь способ сделать это? Я хочу сравнить два экземпляра класса и присвоить одному из них значение на основе сравнения.
Подробнее здесь: https://stackoverflow.com/questions/669 ... th-a-class