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

C#中单行赋值并返回字典值会触发两次查找吗?

问题解答

先看你给出的两个C#代码示例:

第一个单行写法:

public sealed class TestClass {
  private Dictionary<string,int> myDictionary = [];
  public int TestMethod() => myDictionary["foo"] = 3;
}

第二个多行写法:

public sealed class TestClass {
  private Dictionary<string,int> myDictionary = [];
  public int TestMethod() {
    var val = 3;
    myDictionary["foo"] = val;
    return val;
  }
}

核心问题解答

  1. 会不会执行两次字典查找?
    不会。C#中的赋值表达式(myDictionary["foo"] = 3)本身会返回被赋予的值,也就是3,而非先赋值再重新查找键取值。编译器会直接优化为:找到"foo"对应的位置(不存在则添加),将值设为3,然后直接返回3,不会额外执行一次查找操作。

  2. 能不能把多行写法简化成单行?
    完全可以。这两种写法的执行逻辑和性能完全一致,单行写法只是语法糖,编译后的IL代码和多行版本几乎无差别,都是先完成赋值再返回同一个值,不存在额外的字典查找开销。

本质上,单行写法里的myDictionary["foo"] = 3是一个表达式,它的结果就是赋值的右操作数(3),直接返回这个表达式的结果,和先把值存入变量再返回的效果完全相同,没有性能差异。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:40:54