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
}
这样,您的代码仍然能够像预期的那样使用
资源
对象,并且您可以选择轻松地检查默认的资源
谢谢你的建议,不过它不太适合我的情况。