赋值不会在任何执行路径中使用- c#



当我编写以下代码时,Resharper显示了这样的警告:"分配的值没有在任何执行路径中使用":

List<obj> testObj = new List<obj>();
testObj = testMethod();

这里testMethod()返回类型List<obj>。然而,当我直接分配testMethod()而不实例化它时,我没有得到警告。

List<obj> testObj = testMethod();

原谅我的无知,如果我错过了基础知识,但我没有遵循编译器如何为testObj分配内存而不实例化它。

其中一个帖子提到了类似的问题:c#这个初始化器真的是多余的吗?但我没有找到任何答案,我的问题,至于在哪里testObj变量存储它从testMethod收到的值?与原始数据类型不同,"对象类型"只能在实例化之后存储值。请让我知道,如果我错过了什么

在第一行中创建List<object>的实例。然后通过给testObj变量赋另一个从方法testMethod返回的值来丢弃这个对象。这个new List<obj>()对象是冗余的。你实际上是在制造垃圾,垃圾收集器在某个时候必须清理这些垃圾。

这就是ReSharper显示警告的原因。

如果您可以在定义变量的同一行中使用实际值初始化变量,那么就这样做。

编辑(假设我们正在讨论问题中提供的情况):

  1. new运算符不处理变量本身。它在中创建一个新对象(用于引用类型)。
  2. =运算符将赋值给堆栈中的变量。在这种情况下,是对堆中对象的引用。给方法返回的变量赋值和给对象构造函数返回的变量赋值没有区别。对象构造函数也是一个方法。
  3. 变量在赋值之前不需要初始化。实际上,初始化的定义是将初始值赋给一个变量。

最新更新