You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码中下划线的含义?异步方法内冗余代码的技术疑问

代码疑问解答:_ = 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;
  }
}

解答

  1. 两行代码的本质区别

    • MyClass myclass = new MyClass():创建MyClass对象后,会把引用赋值给myclass变量,只要该变量在当前作用域内存在,这个对象就不会被GC(垃圾回收器)回收。
    • _ = new MyClass():创建的MyClass对象没有被任何变量持有引用,创建完成后立即成为GC的回收目标,除了执行构造函数的逻辑外,不会留下任何持久影响。
  2. 当前代码中这行是否多余
    从你提供的代码逻辑和MyClass定义来看,这行完全多余:

    • 后续代码里的myclass变量是从await classService.Getsomething()获取的,和第一行创建的对象没有任何关联;
    • 你的MyClass没有自定义构造函数,默认构造函数只会把id初始化为0、something初始化为null,没有任何全局副作用(比如注册事件、修改静态变量、写入日志等),所以这行代码执行后不会对程序状态产生任何影响,删掉它完全不改变代码的运行结果。
  3. 特殊情况说明
    如果MyClass的构造函数存在隐藏的副作用(比如在构造时执行了某些全局操作),那这行代码可能有特殊作用,但从你给出的定义来看,不存在这种情况。

内容的提问来源于stack exchange,提问作者Tauqir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:30:49