如何将以字符串命名的Dictionary元素设为全局变量?
关于动态字符串命名全局变量的实现方案
首先明确:没法直接让ESScommand[sample.Data.ESS_name]成为独立的全局变量,但可以通过让存储它的字典成为全局对象,间接实现用字符串作为“全局变量名”访问对象的需求,这是C#里最可行的方案。
具体实现步骤
- 将存储字典定义为全局静态成员
可以创建一个专门的全局静态类来存放字典,确保整个应用域内都能访问:public static class GlobalStorage { // 多线程场景优先用ConcurrentDictionary保证线程安全 public static ConcurrentDictionary<string, ESS_command> ESSCommands = new ConcurrentDictionary<string, ESS_command>(); } - 赋值与全局访问
赋值时直接操作全局字典:
在其他任意位置访问时:// 以动态字符串为键,存入目标对象 GlobalStorage.ESSCommands[sample.Data.ESS_name] = sample.Data;// 通过字符串键获取全局存储的对象 ESS_command targetCommand = GlobalStorage.ESSCommands[targetESSName];
为什么不能直接创建动态命名的全局变量
C#是静态类型语言,所有变量名称必须在编译阶段确定,运行时无法动态生成新的全局变量标识符。用字典存储的方式,本质是用键值对模拟动态命名的存储容器,是这类需求的标准替代方案。
注意事项
- 多线程环境下必须使用线程安全集合(比如
ConcurrentDictionary),避免并发操作导致的异常或数据错乱。 - 要确保
sample.Data.ESS_name的唯一性,否则重复的键会覆盖之前存储的对象。
内容的提问来源于stack exchange,提问作者GyeongHun Kim
相关产品推荐
相关产品推荐

