вчера я потратил некоторое время, пытаясь найти ошибку. Короче говоря, наконец я понял, что это из-за этого конструктора:
public Triangle(List<Vertex> vertices) {
this._values = vertices;
}
Я попытался инициализировать объект со списком значений, и объект просто взял ссылку на мой объект вместо получения значений из списка. Если я не откажусь от списка, который я передал в качестве параметра, и использую его позже для чего-то другого, например, для инициализации чего-либо еще с теми же значениями или если я решу очистить его и заполнить новыми значениями, я, очевидно, разрушу состояние моего Triangle
объект, не зная его.
Моей первой реакцией было «исправить ошибку» в конструкторе, но потом я начал думать, действительно ли это так и должно быть. Какая хорошая практика, которая охватывает такие вещи? В общем, что я должен думать о конструкторах / методах инициализации, которые принимают список значений? Должны ли они оставить его нетронутым? Могу ли я повторно использовать список, и чья это вина, если она приводит к ошибке?
Я имею в виду, я, очевидно, могу сделать что-то подобное:
var triangle = new Triangle(new List<Vertex>(vertices));
но разве это не должно быть сделано создателями класса Triangle
уже?
Я хотел бы знать некоторые рекомендации по этому вопросу. Спасибо.