На самом деле ваш перегруженный оператор равенства получает три раза:
Первый , когда вызывается из Program.Main(string[])
со строкой tc1 == tc2
, где left
= tc1
и right
= tc2
, который затем вызывает TestClass.Equals(TestClass)
, где other
= tc2
.
Оттуда other == null
теперь вызывает ваш перегруженный оператор равенства a секунда время, где left
= tc2
и right
= null
.Теперь TestClass.Equals(TestClass)
также называется временем секунды , где other
= null
.
И, наконец, other == null
вызывает ваш перегруженный оператор равенства в течение третьего времени, где оба left
= null
и right
= null
.Это теперь в конечном итоге вызывает System.NullReferenceException , поскольку left было нулевым.
Чтобы исправить эту ошибку кодирования, замените other == null
на other is null
в TestClass.Equals(TestClass)
:
public bool Equals(TestClass other)
{
if (other is null)
return false;
else
return data == other.data;
}
Альтернативно, в качестве условного выражения (используя тело выражения):
public bool Equals(TestClass other) => !(other is null) && data == other.data;