C# WinForm如何拼接两变量内容 实现点击生成序号命名变量
问题原因
你当前的写法存在根本性的语法问题:C#是静态强类型编译型语言,不支持运行时通过拼接字符串的方式动态创建命名变量,你写的int alltime+time;完全不符合C#变量声明语法,无法通过编译。另外C#的标识符(变量名)本身也不允许以数字开头,不可能直接定义出名为1time、2time的正式变量。
实现方案
你要的动态命名变量效果可以用Dictionary<TKey, TValue>(字典)实现:用你生成的{序号}time格式字符串作为字典的键,用键对应存储的值模拟动态变量的内容,使用体验和直接访问对应名称的变量完全一致。
完整实现代码
// 类级别定义,放在窗体类内部 // 点击计数,初始值1对应第一次点击 private int alltime = 1; // 字典存储动态变量:键为你要的变量名字符串,值为变量存储的内容,这里示例存int类型,可按需替换 private Dictionary<string, int> timeVariables = new Dictionary<string, int>(); private void button1_Click(object sender, EventArgs e) { // 生成当前次的变量名 string varName = $"{alltime}time"; // 给对应名称的变量赋值,示例值为当前点击次数,可替换成你实际业务需要存储的内容 timeVariables.Add(varName, alltime); // 后续使用变量时,直接通过键访问即可,比如获取第一次点击生成的变量值就写 timeVariables["1time"] // 计数自增,为下一次点击做准备 alltime++; }
拓展说明
- 如果你需要存储不同类型的变量值,可以把字典的值类型改为
object,取值时再转换为对应实际类型即可。 - 不要尝试用反射、动态类型等重方案实现这个需求,字典是这类场景下最简单、性能最好的实现方式。
内容的提问来源于stack exchange,提问作者Nishesh Tyagi
相关产品推荐
相关产品推荐

