这是场景

我知道类是引用类型,结构是值类型

下面是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工具告诉我们的。


不对在该循环的内部或外部使用分配时,分配将具有相同的“价格”。我假设您的工具正在警告您,因为在每次迭代中在循环中分配对象可能会导致实例化许多对象,但这正是此处所需要的。在这种情况下,绝对没有必要避免对象分配。

我会更担心您正在使用的特定工具及其带来的建议。

10-05 20:28
查看更多