[Unity冷知识]关于Dictionary的冷知识

本文探讨Unity中Dictionary的不常用知识点,包括如何避免KeyNotFoundException,以及为何可以为不存在的Key直接赋值而不引发错误,这源于Dictionary的索引器行为。
摘要由CSDN通过智能技术生成

本文不详细介绍Dictionary的用法,只介绍一些冷门知识。

1.我们经常遇到报错 KeyNotFoundException: The given key was not present in the dictionary.这是因为字典里面没有我们要找的key导致的,所以一般在使用字典前我们都要判断下 dic.ContainsKey(),看下key存不存在。当然也可以用 dic.TryGetValue()这个函数来避免掉上面的报错。

2. 从上面我们知道,当key不存在时,我们去拿字典的value就会报错,但是有一种写法,我们可以不去拿value,直接赋值,比如

  dic[12] = 0;

这样写不会有任何问题,且等价于


  if (!dic.ContainsKey(12))
      dic.Add(12, 0);
  else dic[12] = 0;

但这是为什么呢,我们看下dictionary的代码

 public TValue this[TKey key]
    {
      get
      {
        int entry = this.FindEntry(key);
        if (entry >= 0)
          return this.entries[entry].value;
        ThrowHelper.ThrowKeyNotFoundException();
        return default (TValue);
      }
      set
      {
        this.Insert(key, value, false);
 
Unity序列化监视面板是指将数据以可视化的形式显示在Unity编辑器的Inspector面板上的过程。默认情况下,Unity无法直接序列化Dictionary类型的数据到Inspector面板。因此,我们需要进行额外的处理来实现这个功能。 为了实现Dictionary类型的序列化,可以通过创建一个SerializableDictionary类来解决这个问题。SerializableDictionary类是一个自定义的类,用于存储Dictionary的键值对,并实现了Unity的ISerializationCallbackReceiver接口以实现序列化和反序列化。通过自定义SerializableDictionary类,我们可以在Inspector面板显示并编辑Dictionary的数据。 在Unity,序列化是一种将数据从内存转换成可存储或传输的格式的过程,而反序列化则是将数据从存储或传输的格式转换回内存的过程。Unity的数据存储,包括本地类PlayerPrefs、Inspector以及Prefab等,都使用了序列化和反序列化的知识。通过序列化,我们可以方便地在Inspector面板配置和编辑Unity对象的属性和数据。 通过以上的方法,我们可以实现UnityDictionary类型数据的序列化和在Inspector面板的显示。这样可以方便地配置和编辑Unity对象的属性,并进行必要的调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【100个 Unity实用技能】 ☀️ | 将Dictionary字典的数据序列化 到Unity Inspector监视器面板](https://blog.csdn.net/zhangay1998/article/details/129135799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Unity的序列化与反序列化](https://blog.csdn.net/weixin_39668571/article/details/113547537)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值