Я отлаживал свою программу на C # и через несколько бесполезных промежутков времени обнаружил, что ошибка возникла из-за «случайной» передачи массива по ссылке, а не по значению.
Вот некоторый псевдокод:
//1st pass
currentVertices = levels[0].vertices;
currentVertices[0].Position.Z -= 10;
//2nd pass
currentVertices = levels[1].vertices;
currentVertices[0].Position.Z -= 10;
//3rd pass
currentVertices = levels[0].vertices;
currentVertices[0].Position.Z -= 10;
//currentVertices[0].Position.Z is now 10 less than expected;
//20 less than it started. Further loops will increase the difference in expected
//value.
Я не ожидал, что передал массив по ссылке, но все равно случайно сделал это.
Есть ли способ назначить массив по значению вместо ссылки?Я знаю, что мог бы пройтись по обоим массивам, назначая каждый термин индивидуально, но это кажется излишне сложным.Я вполне уверен, что функция Clone (), ну, клонирует, значения без соответствующих ссылок, но разве это единственный способ присвоения по значению?Т.е. currentVertices = levels[1].vertices.Clone();
Разве Clone () вообще не рекомендуется?Как лучше всего передавать массивы по значению?
В краткосрочной перспективе я просто жестко прописал, какие значения должны быть после загрузки.
Как один из моих друзей-модераторовзаметил,
«Я вижу, вы решили пройти через ссылку путем обхода.»