首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过分配新数组更改数组值

通过分配新数组更改数组值
EN

Stack Overflow用户
提问于 2022-01-06 01:27:47
回答 2查看 72关注 0票数 -1

我有一个bool数组

代码语言:javascript
复制
private bool[] example =  {false, false};

我使用一个函数来修改它们,如果这两个值都是真的话,这个函数也会返回true。

代码语言:javascript
复制
    private bool checkExample(bool firstCondition, bool secondCondition){
        example = new bool[]{firstCondition, secondCondition};
        return example.All(x => x);
    }

我很担心这里的记忆。通过分配一个新数组来更改数组安全吗?new bool[]{firstCondition, secondCondition};

引擎盖下面到底发生了什么?根据我的理解,因为它在一个函数中,所以我们使用的是短期存储?还是因为我们使用关键字new,我们使用的是长期存储?

我很重视你的帮助。

示例用例:

代码语言:javascript
复制
checkExample(example[0], true); // and vice versa
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-06 01:58:42

这里发生的事情很简单。首先,您需要认识到,所有数组(甚至值类型的数组(如bool)都是引用类型的实例。所以当你说:

代码语言:javascript
复制
private bool[] example =  {false, false};

您要做的是在类中创建一个字段,该字段包含对bool的单维度数组的引用。由于您正在初始化它,因此将创建和初始化数组,从而在托管堆上创建一个对象。

在您的方法中,您将执行以下操作:

代码语言:javascript
复制
example = new bool[]{firstCondition, secondCondition};

在该代码中,您指的是初始化时相同的example成员。在该代码中所发生的事情是,在托管堆上创建一个新的bool数组并进行初始化,您将向example字段分配一个对该新数组的引用。

此时,除非将对原始数组的引用分配给其他东西(长期存在的变量、字段或属性),否则原始数组将不再具有对它的任何引用。一旦托管堆上的对象不再具有对其的任何引用,它就有资格进行垃圾收集。

在将来的某个时候,垃圾收集器会出现并“收集”内存。如果数组没有出现很长时间,那么它将被收集到一个Gen0集合中(这非常便宜)。很可能,它将被收集到一个Gen1或Gen2集合中(每个集合的成本都会更高)。

一般来说,你不需要担心这样的事情。托管(/garbage回收)系统期望您的代码产生垃圾。在.NET中的分配非常便宜。要使垃圾收集(特别是对小型对象)高效,需要付出很大的努力。

票数 2
EN

Stack Overflow用户

发布于 2022-01-06 02:00:48

如果您不需要创建一个新的数组,为什么不使用它呢?

代码语言:javascript
复制
 private bool checkExample(bool firstCondition, bool secondCondition){
        example[0]=firstCondition; 
        example[1]= secondCondition;
        return example.All(x => x);
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70601485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档