news 2026/7/10 22:41:36

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/7/6 6:15:33

HY-MT1.5-7B省钱攻略:按需GPU比买显卡省90%,2块钱试效果

HY-MT1.5-7B省钱攻略&#xff1a;按需GPU比买显卡省90%&#xff0c;2块钱试效果 你是不是也遇到过这种情况&#xff1a;手头有个项目需要翻译功能&#xff0c;但商用API按字符收费&#xff0c;一个月下来账单吓人&#xff1f;尤其是用户量一上来&#xff0c;成本直接翻倍。更头…

作者头像 李华
网站建设 2026/7/5 12:42:58

Gopher360终极评测:用手柄轻松控制电脑的完整指南

Gopher360终极评测&#xff1a;用手柄轻松控制电脑的完整指南 【免费下载链接】Gopher360 Gopher360 is a free zero-config app that instantly turns your Xbox 360, Xbox One, or even DualShock controller into a mouse and keyboard. Just download, run, and relax. 项…

作者头像 李华
网站建设 2026/7/1 11:54:25

麦橘超然适合哪些场景?写实/动漫/概念图实测

麦橘超然适合哪些场景&#xff1f;写实/动漫/概念图实测 1. 引言 随着 AI 图像生成技术的快速发展&#xff0c;越来越多用户希望在本地设备上实现高质量、低资源消耗的图像创作。麦橘超然&#xff08;MajicFLUX&#xff09; 作为基于 Flux.1 架构优化的离线图像生成模型&…

作者头像 李华
网站建设 2026/7/3 16:38:54

如何用自然语言分割视频目标?SAM3大模型镜像一键上手

如何用自然语言分割视频目标&#xff1f;SAM3大模型镜像一键上手 1. 引言&#xff1a;让视频目标分割变得简单 在计算机视觉领域&#xff0c;视频中的目标分割是一项极具挑战性的任务。传统方法往往依赖于大量标注数据和复杂的训练流程&#xff0c;而近年来兴起的提示式&…

作者头像 李华
网站建设 2026/7/8 5:31:26

AI编程工具智能激活全攻略:从零开始实现功能完整解锁

AI编程工具智能激活全攻略&#xff1a;从零开始实现功能完整解锁 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tria…

作者头像 李华
网站建设 2026/7/5 17:37:48

终极Mac鼠标平滑滚动解决方案:Mos让你的滚轮爽如触控板

终极Mac鼠标平滑滚动解决方案&#xff1a;Mos让你的滚轮爽如触控板 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently …

作者头像 李华