news 2026/5/4 13:41:33

switch和硬编码字典的等效性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
switch和硬编码字典的等效性

背景

写背包系统时点击物品格子,出现详情页,详情页的选项按钮根据物品种类、所属容器动态生成。这里生成选项按钮取决于的”键“有多个:物品种类、所属容器,执行的操作是生成几个按钮,写入名称、添加回调。按常规思路会写成2层判断,一个长度恐怖的函数。

改进

经过豆包的启发:

  1. 双键可以使用Tuple<>;
  2. switch可以用硬编码字典;
  3. case后面的操作可以用委托存放;

变成了这样一个硬编码字典:虽然还是很长,但是比原来的写法(200多行)已经好多了,而且更整齐了。

public class ButtonConfig { public string hint; public UnityAction callback; } Dictionary<Tuple<CellLocation, Props_Type>, List<ButtonConfig>> buttonConfigs; buttonConfigs = new() { //场景内物品选项 {Tuple.Create(CellLocation.Scene,Props_Type.Gun), new(){ new ButtonConfig { hint="拾取",callback=()=>{ TakeGunFromGround(cellSelected);} } } }, {Tuple.Create(CellLocation.Scene,Props_Type.Mag), new(){ new ButtonConfig { hint="拾取",callback=()=>{ PickMagFromScene(cellSelected);} } }}, {Tuple.Create(CellLocation.Scene,Props_Type.Medicine), new(){ new ButtonConfig { hint="拾取",callback=()=>{ PickFromScene(cellSelected);} } }}, {Tuple.Create(CellLocation.Scene,Props_Type.Grenade), new(){ new ButtonConfig { hint="拾取",callback=()=>{ PickFromScene(cellSelected);} } }}, //玩家背包内物品选项 {Tuple.Create(CellLocation.PlayerPack,Props_Type.Mag), new (){new ButtonConfig {hint="放下",callback=()=> { if (putIn){PutMagInCrate(cellSelected); }else{DropMag(cellSelected);} } } }}, {Tuple.Create(CellLocation.PlayerPack,Props_Type.Medicine), new (){new ButtonConfig {hint="放下",callback=PutItem}, new ButtonConfig{hint="使用",callback=TryUseMedicine} } }, {Tuple.Create(CellLocation.PlayerPack,Props_Type.Grenade), new(){ new ButtonConfig {hint="放下",callback= PutItem }, new ButtonConfig{hint="使用",callback=TryUseGrenade } } }, //其他容器内物品选项 {Tuple.Create(CellLocation.OtherPack,Props_Type.Mag), new(){ new ButtonConfig {hint="拾取",callback=()=>{PickMagFromCrate(cellSelected);} }}}, {Tuple.Create(CellLocation.OtherPack,Props_Type.Medicine), new(){new ButtonConfig {hint="拾取",callback=()=>{PickFromCrate(cellSelected);} } } }, {Tuple.Create(CellLocation.OtherPack,Props_Type.Grenade), new(){new ButtonConfig {hint="拾取",callback=()=>{PickFromCrate(cellSelected);} } } }, {Tuple.Create(CellLocation.OtherPack,Props_Type.Gun), new(){ new ButtonConfig {hint="拾取",callback=()=> { TakeGunFromCrate(cellSelected); } } } } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 15:17:14

AI证件照省钱攻略:云端GPU按需付费,比照相馆省90%

AI证件照省钱攻略&#xff1a;云端GPU按需付费&#xff0c;比照相馆省90% 你是不是也遇到过这种情况&#xff1f;创业初期要注册公司、办营业执照、申请融资BP&#xff0c;或者准备LinkedIn个人主页&#xff0c;突然发现——缺一张像样的商务形象照。去照相馆拍一套&#xff1…

作者头像 李华
网站建设 2026/4/23 12:08:40

5个让你彻底爱上Windows任务栏的终极技巧

5个让你彻底爱上Windows任务栏的终极技巧 【免费下载链接】7-Taskbar-Tweaker Windows Taskbar Customization Tool 项目地址: https://gitcode.com/gh_mirrors/7t/7-Taskbar-Tweaker 你是否曾经因为Windows任务栏的"死板"操作而抓狂&#xff1f;&#x1f62b…

作者头像 李华
网站建设 2026/5/1 4:49:25

OpenWrt访问控制完整指南:打造智能家庭网络

OpenWrt访问控制完整指南&#xff1a;打造智能家庭网络 【免费下载链接】luci-access-control OpenWrt internet access scheduler 项目地址: https://gitcode.com/gh_mirrors/lu/luci-access-control 现代家庭网络管理面临诸多挑战&#xff1a;孩子过度沉迷网络、员工工…

作者头像 李华
网站建设 2026/4/23 21:39:28

Windows 10下PL-2303老款芯片驱动终极解决方案:告别数据写入问题

Windows 10下PL-2303老款芯片驱动终极解决方案&#xff1a;告别数据写入问题 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 还在为PL-2303老款芯片在Windows 10上只能…

作者头像 李华
网站建设 2026/5/2 1:45:20

微信防撤回工具完全攻略:从此不再错过任何重要消息

微信防撤回工具完全攻略&#xff1a;从此不再错过任何重要消息 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com/G…

作者头像 李华
网站建设 2026/4/24 19:54:10

Qwen3-VL-8B零基础教程:云端GPU免配置,1小时1块快速上手

Qwen3-VL-8B零基础教程&#xff1a;云端GPU免配置&#xff0c;1小时1块快速上手 你是不是也刷到过那种“AI看一眼图片就能写报告”的视频&#xff1f;最近在社交媒体上爆火的 Qwen3-VL-8B 就是这么一个“图文全能王”。它不仅能识别图里的文字&#xff0c;还能理解排版、价格对…

作者头像 李华