Равенство последовательностей массивов объектов, содержащих двумерные массивы объектовC#

Место общения программистов C#
Anonymous
Равенство последовательностей массивов объектов, содержащих двумерные массивы объектов

Сообщение Anonymous »

Я хотел написать функцию, которая что-то делает с входным объектом[,] и возвращает объект[], элементы которого являются объектами object[,]. Я просто для начала написал что-то глупое, не вводя никаких данных, чтобы сначала настроить тесты, а затем правильно закодировать функцию:

Код: Выделить всё

public static class TestData
{
public static object[,] Island1()
{
object[,] res = new object[3, 2];
res[0, 0] = 1;
res[0, 1] = 0;
res[1, 0] = 1;
res[1, 1] = 1;
res[2, 0] = 1;
res[2, 1] = 0;
return res;
}
}

public class ComponentsFinder
{
public object[] GetIslands()
{
return  new object[]{TestData.Island1()};
}
}
и тест:

Код: Выделить всё

[TestClass]
public class TestCompomentsFinder
{
[TestMethod]
public void FirstTest()
{
object[,] island1 = TestData.Island1();
object[] expected = new object[] {island1};
object[] actual = new ComponentsFinder().GetIslands();
bool res = actual.SequenceEqual(expected);
Assert.IsTrue(res);
}
}
Этот тест не пройден, и я знаю, почему: даже если оба объекта[] содержат только один объект, представляющий объект [,], который представляет одну и ту же «матрицу», они не указывают на один и тот же массив, следовательно, тест провален.

Был бы у меня настоящий класс C вместо объекта[,] это не было бы проблемой, как я бы сделал C правильно реализует IEquatable, и переопределение Equals будет затем вызвано SequenceEquals, и тест пройдет нормально.

Но здесь у меня нет класса, так что мне делать? Должен ли я действительно обернуть все в классы или есть другой способ проверить равенство моих объектов[] (что означает проверку равенства объектов [,] в смысле наличия одинаковых размеров и одинаковых соответствующих коэффициентов, коэффициенты моего объекта [,] являются типом, реализующим IEquatable)?

Вернуться в «C#»