gpt4 book ai didi

c# - List .ForEach-将对象传递给ForEach是引用还是副本?

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:47 24 4
gpt4 key购买 nike

使用List<T>.ForEach时要传递的对象(即以下示例中的j)是通过引用还是按值传递的?

MyList.ForEach( j => {} );


如果我要执行以下操作:

MyList.ForEach( j => {
j.someOtherList.Add("value");
});


这是对 j的副本起作用还是对原始对象起作用?

最佳答案

根本没有传入任何对象-存在类型为T的值。如果T是引用类型,则该值为引用。值是照常传递的。

现在假设T是具有成员someOtherList的某种引用类型,那么您的代码确实会影响j的值所引用的对象-但j的值仅是引用。列表中的值将是相同的引用,因此,如果再次(例如)遍历列表,您将能够看到效果。

重要的是,如果您将代码更改为:

MyList.ForEach( j => {
j = new WhateverYourTypeIs()
});


完全不会影响列表。

我怀疑您可能对按值传递和按引用传递的工作方式有些困惑,尤其是在C#的情况下。我有一个 article on the topic可能会对您有所帮助。

关于c# - List <T> .ForEach-将对象传递给ForEach是引用还是副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18687922/

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