San*_*anu 1 c# oop instantiation
Resharper显示此警告:当我编写以下代码时,"在任何执行路径中都没有使用赋值":
List<obj> testObj = new List<obj>();
testObj = testMethod();
Run Code Online (Sandbox Code Playgroud)
这里testMethod()返回类型List<obj>.但是,当我直接分配testMethod()没有实例化它时,我没有得到警告.
List<obj> testObj = testMethod();
Run Code Online (Sandbox Code Playgroud)
请原谅我的无知,如果我错过了基础知识,但我没有关注编译器如何在testObj没有实例化的情况下分配内存.
其中一个帖子提到了类似的问题:C#这个初始化器真的是多余的吗?但是我没有找到任何关于我的问题的答案,关于testObj变量存储它收到的值的位置testMethod?与原始数据类型不同,"对象类型"只有在实例化后才能存储值.如果我错过了什么,请告诉我.
您正在List<object>第一行创建a的实例.然后通过为testObj变量分配从方法返回的另一个值来抛弃此对象testMethod.这个new List<obj>()对象是多余的.您有效地创建了垃圾收集器在某些时候必须清理的垃圾.
这就是ReSharper向您展示警告的原因.
如果可以在定义变量的同一行中使用实际值初始化变量,则执行此操作.
编辑(假设我们正在讨论问题中提供的情况):
new运算符本身不处理变量.它在堆中创建一个新对象(对于引用类型).=操作者分配一个值,以在一个变量堆栈.在这种情况下,value是对堆中对象的引用.| 归档时间: |
|
| 查看次数: |
5070 次 |
| 最近记录: |