这是场景
我知道类是引用类型,结构是值类型
下面是Code1,它成功输出了Output1,这是预期的功能,因为在创建新obj时会创建一个新的参考点并将其添加到人员列表。
在code2中。分配了相同的对象,并且正如代码所描述的那样,foreach循环实际上正在更新Obj始终指向的相同引用。在for循环执行结束时,将最终值分配给所有列表项,如Output2中一样
对于CAST工具审查中的Code1案例,我们得到的是“避免循环中的对象实例化”。我知道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);
}
}
}
输出量
罗伯特00
罗伯特110
罗伯特220
罗伯特330
罗伯特440
罗伯特550
罗伯特660
罗伯特770
罗伯特880
罗伯特990
代码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
罗伯特990
罗伯特990
罗伯特990
罗伯特990
罗伯特990
罗伯特990
罗伯特990
罗伯特990
罗伯特990
最佳答案
我知道for循环中的实例化对象也会占用额外的内存和性能,这正是我想CAST工具告诉我们的。
不对在该循环的内部或外部使用分配时,分配将具有相同的“价格”。我假设您的工具正在警告您,因为在每次迭代中在循环中分配对象可能会导致实例化许多对象,但这正是此处所需要的。在这种情况下,绝对没有必要避免对象分配。
我会更担心您正在使用的特定工具及其带来的建议。