在C#中将不同类型的多个变量设置为null以进行内存管理

在C#中将不同类型的多个变量设置为null以进行内存管理,c#,.net,variables,memory-management,C#,.net,Variables,Memory Management,假设我有一个3D双数组3dArray,和一个自定义类型的变量Personperson1。这样做: 3dArray = null; person1 = null; 3dArray = person1 = null; 可以工作,但看起来很邋遢,这样做: 3dArray = null; person1 = null; 3dArray = person1 = null; as由于无法隐式转换3dArray和person1而引发错误。有没有更好的方法在一行中实现这一点?没有。C#没有特别的规定

假设我有一个3D双数组
3dArray
,和一个自定义类型的变量
Person
person1
。这样做:

3dArray = null;
person1 = null;
3dArray = person1 = null; 
可以工作,但看起来很邋遢,这样做:

3dArray = null;
person1 = null;
3dArray = person1 = null; 

as由于无法隐式转换3dArray和person1而引发错误。有没有更好的方法在一行中实现这一点?

没有。C#没有特别的规定,不管变量类型如何,null都可以通过它进行传播。否则它是强类型的,因此此赋值是不合法的(因为第一次赋值决定了变量类型)。

如果您只想在一行上赋值

3dArray = null; person1 = null; something_else = null;

从类型的角度看,它不会保存任何内容,但它是更为垂直密集的代码。

您可以这样做,但前提是类型之间存在某种关系,并且您可以从特定类型分配到常规类型。例如,这项工作:

    string s;
    object o;
    IEnumerable l;

    o = l = s = null;

为什么要这样做?GC完全能够处理这个问题。在适用的情况下使用IDisposable(),让其余的事情发生。通过将变量设置为null,实际上可以延长它的生命周期并阻止GC执行其任务job@maccettura这是有道理的。非常感谢。但是,我的3D阵列占用了大约2GB的内存,并且没有实现IDisposable。我注意到我的应用程序可以使用大约4-5GB的内存,而我知道这是不必要的。我应该将其设置为null吗?这在c#8的更高版本中可能是可能的,因为将要改变原语可以设置为null的方式,但可能不是,而且会争论。。。这将违反类型化语言的全部要点!,如果它们是同一类型的,那么当然。此外,你的标题是非常具体的。。。提到“用于内存管理”上述任何一项都不会真正影响内存管理,就“内存管理”而言,上述只是语义。如果您这样做是因为您认为影响内存管理,那么您的错误
IDisposable
不负责释放内存,这是垃圾收集器的工作。没有必要将变量设置为null,因为gc将知道对象是否不再可访问,并根据需要收集它。这种情况何时发生并不确定。它应该在内存压力下发生。虽然它符合要求,但这不是一个好主意。每一条线都应该有自己的半殖民地,严格来说,这是一个口味问题。我个人不介意为技术上无关紧要的细节保留垂直空间。实际上,可以通过隐式操作符重载为每个类实现。这是一个糟糕的解决方案,因为我相信给定的类型在逻辑上不能从一个转换到另一个。但是不管它是否为空,它都会工作。