如何在C#中通过for循环动态创建numX格式的命名变量?
动态创建命名变量的解决方案
你的代码存在语法错误,且C#作为静态类型语言,无法在运行时直接动态创建如num1、num2这类命名变量。下面是正确的实现思路和代码:
问题分析
- 代码中
int tmp.name = Console.ReadLine();是无效语法,C#不支持通过字符串拼接生成变量名 - 静态语言的变量需要在编译阶段确定定义,运行时无法动态生成新的命名变量
解决方案1:用Dictionary存储命名变量
如果必须保留num1、num2这类命名标识,可以用Dictionary<string, int>来映射变量名和对应数值:
Console.WriteLine("Input count of numbers: "); ushort.TryParse(Console.ReadLine(), out ushort countVariables); var numberMap = new Dictionary<string, int>(); for (int i = 1; i <= countVariables; i++) { Console.WriteLine($"Enter value for num{i}: "); // 验证输入有效性 if (int.TryParse(Console.ReadLine(), out int inputValue)) { string varName = $"num{i}"; numberMap[varName] = inputValue; } else { Console.WriteLine($"Invalid input, please enter an integer for num{i}."); i--; // 重新获取当前项的输入 } } // 示例:访问指定命名的变量 if (numberMap.ContainsKey("num3")) { Console.WriteLine($"num3 = {numberMap["num3"]}"); }
解决方案2:用List存储(无需显式命名)
如果只是需要按顺序管理输入的数值,用List<int>更简洁:
Console.WriteLine("Input count of numbers: "); ushort.TryParse(Console.ReadLine(), out ushort countVariables); var numbers = new List<int>(); for (int i = 1; i <= countVariables; i++) { Console.WriteLine($"Enter number {i}: "); if (int.TryParse(Console.ReadLine(), out int inputValue)) { numbers.Add(inputValue); } else { Console.WriteLine($"Invalid input, please enter an integer for number {i}."); i--; } } // 示例:访问第1个输入的数值(对应num1) if (numbers.Count > 0) { Console.WriteLine($"num1 = {numbers[0]}"); }
说明
在C#这类静态语言中,动态生成命名变量不是常规操作,使用集合(Dictionary/List)可以更安全、规范地管理动态输入的数值,同时满足按名称或顺序访问的需求。
内容的提问来源于stack exchange,提问作者Maksym Tymoshchuk
相关产品推荐
相关产品推荐

