C# 当一个值设置为null时,幕后会发生什么?

C# 当一个值设置为null时,幕后会发生什么?,c#,null,assignment-operator,C#,Null,Assignment Operator,假设我有一个填充的对象数组 Resource[] list = new Resource[100000]; 偶尔,我想将列表中的一个对象更改为默认值 Resource defaultResource = new Resource(); 稍后,我想检查该项是否为默认项。 因此,我想知道将list对象设置为默认值与将值设置为null有什么性能差异 list[i] = defaultResource; /*versus*/ list[i] = null; 所以,实际上,我想知道当一个值设置

假设我有一个填充的对象数组

 Resource[] list = new Resource[100000];
偶尔,我想将列表中的一个对象更改为默认值

 Resource defaultResource = new Resource();
稍后,我想检查该项是否为默认项。 因此,我想知道将list对象设置为默认值与将值设置为null有什么性能差异

 list[i] = defaultResource; /*versus*/ list[i] = null;
所以,实际上,我想知道当一个值设置为null时,与将其设置为其他值时,幕后会发生什么


对不起,如果这是一个愚蠢的问题

将变量设置为现有对象与将其设置为
null
之间没有太大区别。在这两种情况下,之前被该变量引用的对象将更接近垃圾收集的条件,而不管该变量中存储的新值是
null
还是其他对象。分配的其余部分也以同样的方式进行:CLR不维护引用计数,因此在进行分配时不需要特别处理


存储一个默认对象来代替
null
,以避免在运行时进行大量的
null
检查,这可能是有益的,但这样做可以简化代码,并且减少了在运行时分支的需求。

< P>一种可能的方案,考虑到您的方案——您希望简化不必编写空校验码。 考虑使用表示默认值的存根对
资源
类进行子类化

public class NoResource : Resource { }

// ... later

if (res is NoResource) { 
  // handle default value
}

这样,您的代码仍然能够像预期的那样使用
资源
对象,并且您可以选择轻松地检查默认的
资源

谢谢你的建议,不过它不太适合我的情况。