C#中能否根据用户输入的字符串命名对象?附代码示例
在C#中能否用用户输入的字符串作为对象名称?
你的代码片段:
//Allow user to add details of a player Console.WriteLine("Please enter a player name"); string player = Console.ReadLine(); //Create new player object PlayersClass userPlayer = new PlayersClass();
你的PlayersClass定义:
class PlayersClass { public int id; public string name, city, street, teamName; public DateTime birthDate; public float height; }
你的核心需求:
希望用用户输入的字符串player的值替代userPlayer作为对象名,并且将这类对象存入玩家列表,列表中的对象均以对应玩家的名称命名(忽略类内部的name属性)。
嘿,这在C#里是做不到的哦。因为C#是静态类型语言,变量名是在编译阶段就固定下来的,没办法在运行时根据用户输入的字符串动态生成变量名。
不过别担心,我们可以用另一种方式实现类似的效果——用Dictionary<string, PlayersClass>来映射玩家名称和对应的对象。这样你就能通过用户输入的名字快速找到对应的对象,完全满足你的需求:
// 初始化一个字典,用来关联玩家名称和对应的对象 Dictionary<string, PlayersClass> playerMap = new Dictionary<string, PlayersClass>(); Console.WriteLine("Please enter a player name"); string playerName = Console.ReadLine(); // 创建新的玩家对象 PlayersClass newPlayer = new PlayersClass(); // 将对象存入字典,用用户输入的名字作为键 playerMap.Add(playerName, newPlayer); // 如果需要把对象加入列表,直接操作对象即可 List<PlayersClass> playerList = new List<PlayersClass>(); playerList.Add(newPlayer); // 之后如果要通过玩家名称获取对象,直接用字典的键查找就行 if (playerMap.TryGetValue(playerName, out PlayersClass targetPlayer)) { // 这里可以操作targetPlayer对象 }
这样一来,虽然不能直接把用户输入的字符串当变量名,但通过字典的键值对,你可以实现“用玩家名称关联对象”的核心需求,而且完全不影响把对象存入列表的操作。
内容的提问来源于stack exchange,提问作者roi guber
相关产品推荐
相关产品推荐

