赋值不会在任何执行路径中使用- c#
本文关键字:路径 执行 任何 赋值 | 更新日期: 2023-09-27 18:17:38
当我编写以下代码时,Resharper显示了这样的警告:"分配的值没有在任何执行路径中使用":
List<obj> testObj = new List<obj>();
testObj = testMethod();
这里testMethod()
返回类型List<obj>
。然而,当我直接分配testMethod()
而不实例化它时,我没有得到警告。
List<obj> testObj = testMethod();
原谅我的无知,如果我错过了基础知识,但我没有遵循编译器如何为testObj
分配内存而不实例化它。
testObj
变量存储它从testMethod
收到的值?与原始数据类型不同,"对象类型"只能在实例化之后存储值。请让我知道,如果我错过了什么
在第一行中创建List<object>
的实例。然后通过给testObj
变量赋另一个从方法testMethod
返回的值来丢弃这个对象。这个new List<obj>()
对象是冗余的。你实际上是在制造垃圾,垃圾收集器在某个时候必须清理这些垃圾。
这就是ReSharper显示警告的原因。
如果您可以在定义变量的同一行中使用实际值初始化变量,那么就这样做。
编辑(假设我们正在讨论问题中提供的情况):
-
new
运算符不处理变量本身。它在堆中创建一个新对象(用于引用类型)。 -
=
运算符将值赋值给堆栈中的变量。在这种情况下,值是对堆中对象的引用。给方法返回的变量赋值和给对象构造函数返回的变量赋值没有区别。对象构造函数也是一个方法。 - 变量在赋值之前不需要初始化。实际上,初始化的定义是将初始值赋给一个变量。