【问题标题】:What happens behind the scenes when a value is set to null?当值设置为 null 时,幕后会发生什么?
【发布时间】:2013-09-08 17:42:39
【问题描述】:

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

 Resource[] list = new Resource[100000];

偶尔,我想将此列表中的一个对象更改为默认值。

 Resource defaultResource = new Resource();

稍后,我想检查该项目是否为默认项目。 所以,我想知道将列表对象设置为默认值与将值设置为 null 之间的性能差异可能是什么。

 list[i] = defaultResource; /*versus*/ list[i] = null;

所以说真的,我想知道当一个值设置为 null 而不是将其设置为其他值时,幕后发生了什么。

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

【问题讨论】:

    标签: c# null assignment-operator


    【解决方案1】:

    为您的方案考虑的一个可能选项 - 您希望不必编写空检查代码的简化。

    考虑使用代表默认值的存根子类化您的 Resource 类。

    public class NoResource : Resource { }
    
    // ... later
    
    if (res is NoResource) { 
      // handle default value
    }
    

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

    【讨论】:

    • 感谢您的建议,但它不太适合我的情况。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 2020-09-07
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 2010-11-22
      相关资源
      最近更新 更多