c# - 分配的值未在任何执行路径中使用 - C#

标签 c# oop instantiation

<分区>

当我编写以下代码时,Resharper 显示此警告:“分配的值未在任何执行路径中使用”:

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

在这里testMethod()返回类型 List<obj> .但是,当我直接分配 testMethod() 时如果不实例化它,我不会收到警告。

List<obj> testObj = testMethod();

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

其中一个帖子提到了类似的问题:C# Is this initialiser really redundant?但我没有找到关于 testObj 在哪里的问题的答案变量正在存储它从 testMethod 接收到的值?与原始数据类型不同,“对象类型”只有在实例化后才能存储值。如果我遗漏了什么,请告诉我。

最佳答案

您正在创建 List<object> 的实例在第一行。然后你通过分配 testObj 来丢弃这个对象。变量从您的方法返回的另一个值 testMethod .这new List<obj>()对象是多余的。您有效地创建了垃圾收集器在某个时候必须清理的垃圾。

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

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

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

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

关于c# - 分配的值未在任何执行路径中使用 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33115839/

相关文章:

c# - 如何在 C# Excel Interop 中格式化公式结果?

c# - Protobuf .NET 后反序列化处理程序

PHP - 实现日志记录机制以在多个类中归档

c++ - 如何从 C++ 中的静态成员函数访问非静态成员?

java - HttpServlet 中间类未按预期初始化

c# - 在存储过程中使用日期时间作为参数更新表时出错

c# - UnmanagedMemoryStream 有什么用?

php - 选择要在php OOP设计中使用的类

java - 我怎样才能 "Connect"2 类

C++:为什么编译器在不使用时实例化模板