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

如何从静态列表创建FrozenDictionary?

从静态列表创建FrozenDictionary的更优方法?

普通字典可以通过静态列表初始化的方式快速创建:

var dictionary = new Dictionary<int, string> {{1, "Hello" }};

但FrozenDictionary是抽象类,无法直接用这种集合初始化语法创建:

// 此写法无效,FrozenDictionary是抽象类
// var frozen = new FrozenDictionary<int, string> {{1, "Hello" }}; 

目前有两种可行但存在明显缺点的实现方式:

  • 先创建KeyValuePair数组再转换:代码繁琐,还会产生额外的堆内存分配
    var array = new KeyValuePair<int, string>[]{ new (1, "Hello" )};
    var frozen = array.ToFrozenDictionary();
    
  • 先创建普通字典再冻结:会经历两次字典构造过程,效率较低
    var dictionary = new Dictionary<int, string> {{1, "Hello" }};
    var frozen2 = dictionary.ToFrozenDictionary();
    

更优的实现方式

根据你使用的.NET版本和C#版本,有两种更高效简洁的方案:

  1. 使用FrozenDictionary.Create静态方法(.NET 6+)
    直接传入键值对序列,无需构造中间字典或额外数组分配,框架会直接构建冻结字典:

    // 传入KeyValuePair数组
    var frozen = FrozenDictionary.Create(new[] { KeyValuePair.Create(1, "Hello") });
    // 更简洁:传入值元组序列,框架自动转换
    var frozen = FrozenDictionary.Create(new[] { (1, "Hello") });
    
  2. 集合表达式(C# 12+)
    借助C# 12的集合表达式语法,写法最简洁,且编译器会优化中间过程,减少不必要的内存开销:

    var frozen = [ (1, "Hello") ].ToFrozenDictionary();
    

这两种方式都能避免之前方案的缺点,既保证代码简洁,又减少内存分配和构造开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:33:30