Вот сценарийИзбегайте создания объектов в цикле C# - Как этого можно избежать?
Я знаю, что класс ссылочные типы и структуры типы значений
Ниже Вы Code1 успешно выводит output1, который, как ожидается, функциональность, потому как новый OBJ создается создается новый пункт ref и добавляется в список лиц.
В code2. Тот же объект получает назначение и, поскольку код описывает цикл foreach, фактически обновляет ту же ссылку, что Obj указывает все время. В конце для выполнения цикла, окончательное значение присваивается всем элементам списка, как в Выход2
Для случая Code1 при рассмотрении CAST инструмента мы получаем «Избегайте объекта экземпляра в циклах» .Я знаю объекты Инстанцирование in for цикл также требует дополнительной памяти и производительности, что и говорит нам инструмент CAST. В таких сценариях есть какое-то решение, в котором мы можем избежать установки нового объекта внутри цикла.
Использование структур - одно из решений, основанных на настоящем сценарии. Но я хотел бы иметь любые другие идеи.
Код 1
public class person
{
public string name { get; set; }
public int age { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<person> personList = new List<person>();
for (int i = 0; i < 10; i++)
{
person Obj = Obj = new person();
Obj.name = "Robert" + i;
Obj.age = i * 10;
personList.Add(Obj);
}
foreach(person indv in personList)
{
Console.WriteLine(indv.name + indv.age);
}
}
}
Выход
Robert00 Robert110 Robert220 Robert330 Robert440 Robert550 Robert660 Robert770 Robert880 Robert990
Code 2
List<person> personList = new List<person>();
person Obj = Obj = new person();
for (int i = 0; i < 10; i++)
{
Obj.name = "Robert" + i;
Obj.age = i * 10;
personList.Add(Obj);
}
foreach(person indv in personList)
{
Console.WriteLine(indv.name + indv.age);
}
Выход 2
Robert990 Robert990 Robert990 Robert990 Robert990 Robert990 Robert990 Robert990 Robert990
Я хотел бы избежать, пытаясь избежать создания объекта в этот экземпляр. – Matthew
Нет ничего плохого в создании объектов в цикле, чтобы заполнить список. Предупреждение говорит о повторном создании объектов на каждой итерации цикла *, когда на самом деле нужен только один экземпляр *. – Blorgbeard
Я голосую, чтобы закрыть этот вопрос не по теме, потому что это не разумный вопрос. –