gpt4 book ai didi

c# - 在 Loop C# 中创建对象

转载 作者:太空狗 更新时间:2023-10-29 20:42:55 25 4
gpt4 key购买 nike

只是对下面的代码感到好奇。

for (int i=0; i<9; i++)
{
ClassA objectA = new ClassA();
}

ClassA objectA;
for (int i=0; i<9; i++)
{
objectA = new ClassA();
}

任何想法这两种代码有什么区别吗?据我所知,两者每次都会创建不同的实例,因此实例数量将相同..有什么想法吗?

最佳答案

除了作用域之外(即变量是否存在于循环之外)通常没有区别,因为 .NET 变量实际上(在 IL 中)都在开始 无论如何。但是,有一个异常(exception):如果您捕获 变量(进入匿名方法/lambda),那么它的行为会有所不同 - 捕获 的构造遵循 C# 声明。所以:

List<Action> actions = new List<Action>();
ClassA objectA;
for (int i=0;i<9;i++)
{
objectA= new ClassA();
actions.Add(delegate { Console.WriteLine(objectA.GetHashCode()); });
}
foreach(Action action in actions) action();

和:

List<Action> actions = new List<Action>();
for (int i=0;i<9;i++)
{
ClassA objectA= new ClassA();
actions.Add(delegate { Console.WriteLine(objectA.GetHashCode()); });
}
foreach(Action action in actions) action();

将做不同的事情(第一个打印 9 次相同基于地址的哈希码;第二个打印 9 个不同基于地址的哈希码,表明在第二个循环中,我们捕获了 9 个不同变量,而不是一个变量。

在这两种情况下,都创建了 9 个 ClassA 对象 - 只是在第一种情况下我们再也看不到其中的 8 个了。

关于c# - 在 Loop C# 中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com