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

C#中如何通过字符串检索获取不同类型的变量值

方案说明

你当前用两个平行数组、靠索引对齐存变量名和值的思路存在偏差,问题很明确:

  • 常规静态类型数组只能存固定类型的数据,没法直接同时承载char、bool、int、float四类值,强转要么丢失类型信息,要么用无类型指针带来大量内存安全、类型匹配错误
  • 手动维护两个数组的索引对应关系成本极高,增删、修改键值对时很容易出现键和值错位的问题,排查难度很大

正确实现思路

核心是用字符串做键的哈希表(字典)结构搭配类型安全的可变值容器,完全不需要自己维护索引关系:

  1. 外层直接用语言内置的哈希表结构,原生支持通过字符串键快速检索对应值,比自己写数组遍历查找效率高、维护成本低
  2. 哈希表的值部分做一层轻量封装,同时记录「当前值的类型」和「具体数值」两个信息,取值时先判断类型再读取,避免类型不匹配的错误

不同语言的参考实现

  • C++(C++17及以上):直接用std::unordered_map<std::string, std::variant<char, bool, int, float>>,std::variant本身就是类型安全的联合类型,会自动维护当前存储的值类型,取值时调用std::get<目标类型>(对应键的值)即可,不要用void*裸指针存值
  • C#/Java:用内置的Dictionary<string, object>/HashMap<String, Object>作为存储结构,取值时先通过类型判断(is/instanceof)确认值类型后再转换使用;如果要更严谨的类型安全,可以自己定义一个值包装类,用枚举标记值类型、对应字段存不同类型的数值
  • Python/JS这类动态类型语言:直接用原生对象/字典存储即可,动态类型本身就支持同一个字典里存不同类型的值,取值时做下类型判断就不会出错

注意:如果你需要按插入顺序遍历所有键值对,直接选各语言提供的有序哈希表实现即可,比如C++的std::map、Python3.7+的原生dict、Java的LinkedHashMap,依然比自己维护两个平行数组的方案可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:45:30