C#本地实现:以变量值为名称创建变量并统计地区重复次数
在C#中动态创建变量名及本地统计地区出现次数的解决方案
关于动态以变量值为名称创建变量的说明
C#是静态类型编译语言,无法在运行时动态生成以变量值为名称的本地变量——本地变量的名称在编译阶段就已确定,不能随运行时数据动态改变。但可以用键值对集合(比如Dictionary<string, int>)来模拟这种“动态变量”的效果:把地区名称作为集合的Key,统计次数作为Value,完全满足需求,且属于本地变量,无需全局定义。
本地统计各地区出现次数的实现代码
直接修改你的代码,用Dictionary完成统计,更简洁高效:
void Start() { // 关联供应商与买家,提取所需字段 var match = from s in _supplier join b in _buyers on s.District equals b.District select new { District = s.District, MatchSupplier = s, MatchBuyer = b.Name }; // 本地字典:键=地区名,值=出现次数 Dictionary<string, int> districtCount = new Dictionary<string, int>(); foreach (var item in match) { string currentDistrict = item.District; if (districtCount.ContainsKey(currentDistrict)) { // 地区已存在,次数+1 districtCount[currentDistrict]++; } else { // 地区首次出现,初始化次数为1 districtCount.Add(currentDistrict, 1); } } // 打印所有地区的统计结果 foreach (var kvp in districtCount) { Debug.Log($"地区:{kvp.Key},出现次数:{kvp.Value}"); } // 打印不同地区的总数 Debug.Log($"总计不同地区数量:{districtCount.Count}"); }
代码关键点说明
- 用
Dictionary<string, int>替代原List<string>,同时存储地区名和次数,避免重复判断,查询效率从O(n)提升到O(1) - 关联查询时直接提取
District字段,减少重复属性访问 - 遍历匹配结果时,直接维护字典的计数逻辑,无需额外分支处理重复添加
- 最终遍历字典即可输出所有地区的统计数据,逻辑清晰
额外说明
如果非要模拟“动态变量”的语法体验,也可以使用ExpandoObject(动态类型),但这种方式类型不安全,且对于统计次数的场景,Dictionary是更优、更高效的选择。
内容的提问来源于stack exchange,提问作者aron kan
相关产品推荐
相关产品推荐

