分配的值未在任何执行路径中使用 - C#
Value assigned is not used in any execution path - C#
Resharper 显示此警告:"value assigned is not used in any execution path" 当我编写以下代码时:
List<obj> testObj = new List<obj>();
testObj = testMethod();
这里 testMethod()
returns 输入 List<obj>
。但是,当我直接分配 testMethod()
而不实例化它时,我没有收到警告。
List<obj> testObj = testMethod();
请原谅我的无知,如果我缺少基础知识但我没有遵循编译器如何在不实例化的情况下为 testObj
分配内存。
其中一个帖子提到了类似的问题:C# Is this initialiser really redundant? 但我没有找到任何关于 testObj
变量存储它从 [= 收到的值的问题的答案17=]?与原始数据类型不同,'object types' 只有在实例化后才能存储值。如果我遗漏了什么,请告诉我。
您正在第一行创建 List<object>
的实例。然后通过为 testObj
变量分配另一个从您的方法 testMethod
返回的值来丢弃该对象。这个 new List<obj>()
对象是多余的。您有效地创建了垃圾收集器在某个时候必须清理的垃圾。
这就是 ReSharper 向您显示警告的原因。
如果您可以在定义变量的同一行中使用 实际 值初始化变量,那么就这样做。
编辑(假设我们正在谈论问题中提供的情况):
new
运算符不处理变量本身。它在 heap 中创建一个新对象(对于引用类型)。
=
运算符将 value 分配给 stack 中的变量。在这种情况下 value 是对堆中对象的引用。
- 为从方法或对象构造函数返回的变量赋值之间没有区别。对象构造函数其实也是一种方法
- 变量不需要初始化就可以赋值。其实根据定义初始化就是给一个变量赋初值。
Resharper 显示此警告:"value assigned is not used in any execution path" 当我编写以下代码时:
List<obj> testObj = new List<obj>();
testObj = testMethod();
这里 testMethod()
returns 输入 List<obj>
。但是,当我直接分配 testMethod()
而不实例化它时,我没有收到警告。
List<obj> testObj = testMethod();
请原谅我的无知,如果我缺少基础知识但我没有遵循编译器如何在不实例化的情况下为 testObj
分配内存。
其中一个帖子提到了类似的问题:C# Is this initialiser really redundant? 但我没有找到任何关于 testObj
变量存储它从 [= 收到的值的问题的答案17=]?与原始数据类型不同,'object types' 只有在实例化后才能存储值。如果我遗漏了什么,请告诉我。
您正在第一行创建 List<object>
的实例。然后通过为 testObj
变量分配另一个从您的方法 testMethod
返回的值来丢弃该对象。这个 new List<obj>()
对象是多余的。您有效地创建了垃圾收集器在某个时候必须清理的垃圾。
这就是 ReSharper 向您显示警告的原因。
如果您可以在定义变量的同一行中使用 实际 值初始化变量,那么就这样做。
编辑(假设我们正在谈论问题中提供的情况):
new
运算符不处理变量本身。它在 heap 中创建一个新对象(对于引用类型)。=
运算符将 value 分配给 stack 中的变量。在这种情况下 value 是对堆中对象的引用。- 为从方法或对象构造函数返回的变量赋值之间没有区别。对象构造函数其实也是一种方法
- 变量不需要初始化就可以赋值。其实根据定义初始化就是给一个变量赋初值。