You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中如何实现变量名动态包含另一变量?

在C#中实现动态命名变量并存入数组的解决方案

你好呀!首先得明确一点:C#并不支持直接声明名称中包含动态变量的局部变量(比如你想写的aquiles(x)这种语法是行不通的),因为C#是静态类型语言,变量名需要在编译时就确定下来。不过你的核心需求——把动态创建的Warrior实例存入数组,完全可以通过更简洁的方式实现,甚至不需要单独命名每个实例。

先帮你指出原代码里的几个小问题:

  • 数组类型错误:你声明的是String[] SublimeArray,但要存的是Warrior对象,应该改成Warrior[] SublimeArray
  • 循环越界:数组长度是5,索引范围是0到4,所以循环条件应该是x < SublimeArray.Length,而不是x <= SublimeArray.Length,否则会抛出索引越界异常
  • 动态变量名的语法错误:Warrior aquiles(x) = new Warrior();这种写法在C#里不合法

方案1:直接创建实例并存入数组(最适合开放哈希场景)

如果你的目标只是把Warrior实例存入数组用于开放哈希实现,其实根本不需要单独命名每个实例,直接在循环里创建并存入即可:

class Warrior 
{ 
    public string weapon; 
    public string armor; 
}

// 正确声明存储Warrior对象的数组
Warrior[] SublimeArray = new Warrior[5];

for(int x = 0; x < SublimeArray.Length; x++)
{
    // 直接创建Warrior实例并赋值给数组对应索引
    SublimeArray[x] = new Warrior();
}

这样数组的每个位置就都有一个独立的Warrior实例了,完全满足你期望的效果——和你注释里写的aquiles1、aquiles2存入数组是一样的,只是不需要单独给每个实例命名,因为你可以通过数组索引SublimeArray[0]、SublimeArray[1]来访问它们,这也更符合哈希表通过索引操作的逻辑。

方案2:用字典映射动态名称和实例(如果确实需要命名访问)

如果你确实需要通过类似aquiles1、aquiles2这样的名称来访问实例,可以用Dictionary<string, Warrior>来存储名称和实例的映射,同时把实例存入数组:

using System.Collections.Generic;

class Warrior 
{ 
    public string weapon; 
    public string armor; 
}

Warrior[] SublimeArray = new Warrior[5];
// 创建字典用于存储名称和Warrior实例的映射
Dictionary<string, Warrior> warriorMap = new Dictionary<string, Warrior>();

for(int x = 0; x < SublimeArray.Length; x++)
{
    Warrior newWarrior = new Warrior();
    // 存入数组
    SublimeArray[x] = newWarrior;
    // 生成动态名称(比如aquiles1、aquiles2...)并存入字典
    string warriorName = $"aquiles{x + 1}";
    warriorMap.Add(warriorName, newWarrior);
}

// 之后可以通过名称从字典中获取实例
Warrior aquiles1 = warriorMap["aquiles1"];
Warrior aquiles3 = warriorMap["aquiles3"];

针对开放哈希的补充说明

在开放哈希(开放寻址)的实现中,数组本身就是核心存储结构,我们通常是通过哈希计算得到索引,然后直接操作数组对应位置的元素,所以方案1的写法是最直接高效的,不需要额外的字典来维护名称映射。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:58:25