代码中下划线的含义?异步方法内冗余代码的技术疑问
代码疑问解答:
_ = new MyClass();是否多余? 问题描述
我正在审阅以下代码,无法理解其中逻辑。我了解下划线用于丢弃返回值、new关键字、using关键字等语法元素。请问amethod()的第一行代码_ = new MyClass();是否多余?该行是否等价于语句MyClass myclass = new MyClass()?
待审阅代码
using aclasslibrary; private async amethod() { _ = new MyClass(); MyClass myclass; myclass = await classService.Getsomething(); if (myclass != null) { persist (myclass); } }
MyClass定义
namespace aclasslibrary { public class MyClass { public int id; public SomeClass something; } }
解答
两行代码的本质区别
MyClass myclass = new MyClass():创建MyClass对象后,会把引用赋值给myclass变量,只要该变量在当前作用域内存在,这个对象就不会被GC(垃圾回收器)回收。_ = new MyClass():创建的MyClass对象没有被任何变量持有引用,创建完成后立即成为GC的回收目标,除了执行构造函数的逻辑外,不会留下任何持久影响。
当前代码中这行是否多余
从你提供的代码逻辑和MyClass定义来看,这行完全多余:- 后续代码里的
myclass变量是从await classService.Getsomething()获取的,和第一行创建的对象没有任何关联; - 你的MyClass没有自定义构造函数,默认构造函数只会把
id初始化为0、something初始化为null,没有任何全局副作用(比如注册事件、修改静态变量、写入日志等),所以这行代码执行后不会对程序状态产生任何影响,删掉它完全不改变代码的运行结果。
- 后续代码里的
特殊情况说明
如果MyClass的构造函数存在隐藏的副作用(比如在构造时执行了某些全局操作),那这行代码可能有特殊作用,但从你给出的定义来看,不存在这种情况。
内容的提问来源于stack exchange,提问作者Tauqir
相关产品推荐
相关产品推荐

