Rah*_*hul 1 c# object value-type reference-type
这是场景
我知道该类是引用类型,而结构是值类型
下面是Code1,它成功输出了Output1,这是预期的功能,因为在创建新的obj时,会创建一个新的ref point并将其添加到person列表中.
在code2中.正在分配相同的对象,并且代码描述了foreach循环实际上正在更新Obj一直指向的相同引用.在for循环执行结束时,最终值将分配给Output2中的所有列表项
对于CAST工具审查时的Code1,我们得到"避免循环中的对象实例化".我知道for循环中的实例化对象也需要额外的内存和性能,这就是我猜CAST工具告诉我们的.在这种情况下,有任何解决方案,我们可以避免循环内的新对象实例化.
使用Structures是基于当前场景的一种解决方案.但我想有任何其他想法.
代码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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
产量
Robert00 Robert110 Robert220 Robert330 Robert440 Robert550 Robert660 Robert770 Robert880 Robert990
代码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);
}
Run Code Online (Sandbox Code Playgroud)
输出2
Robert990 Robert990 Robert990 Robert990 Robert990 Robert990 Robert990 Robert990 Robert990
我知道for循环中的实例化对象也需要额外的内存和性能,这就是我猜CAST工具告诉我们的.
那是不对的.在该循环内部或外部使用时,分配将具有相同的"价格".我假设你的工具警告你,因为在每次迭代中在一个循环中分配对象可能导致很多对象被实例化,但这正是这里所需要的.在这种情况下,绝对不需要避免对象分配.
我会更担心你正在使用的特定工具及其带来的建议.
归档时间: |
|
查看次数: |
2360 次 |
最近记录: |