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