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

C# 如何通过foreach循环批量创建struct结构体对象

问题核心原因

你报错的根本原因是C#属于静态类型语言,无法在运行时动态生成局部变量的名称,你尝试用循环里的字符串值作为变量名的写法不符合C#语法规范。

可行实现方案

方案1:用Dictionary存储(支持通过字符串名称查找对应实例)

该方案完全匹配你原本想通过something字符串标识每个结构体的需求,示例代码:

// 先定义字典,键为你要标识实例的字符串,值为TestStruct实例
Dictionary<string, TestStruct> structDict = new Dictionary<string, TestStruct>();

foreach (string something in anything)
{
    // 创建实例
    TestStruct newStruct = new TestStruct(1, 2);
    // 可在这里自定义实例属性赋值,比如:
    // newStruct.value1 = 8;
    // newStruct.Add("panapinom");
    // 存入字典,键为当前遍历到的something
    structDict.Add(something, newStruct);
}

后续要取用对应实例时直接通过key获取即可:

// 比如取key为"test"的实例
TestStruct target = structDict["test"];
// 注意:因为TestStruct是值类型,如果要修改获取到的实例的属性并同步回字典,需要重新赋值:
target.value1 = 10;
structDict["test"] = target;

方案2:用List存储(仅需要批量存储不需要按名称查找)

如果不需要通过字符串名称检索对应实例,直接用泛型列表存储所有创建的实例即可:

List<TestStruct> structList = new List<TestStruct>();

foreach (string something in anything)
{
    TestStruct newStruct = new TestStruct(1, 2);
    // 自定义赋值逻辑
    structList.Add(newStruct);
}
额外注意事项
  • 你当前定义的TestStruct是值类型(struct),如果频繁修改属性、或者需要多地方引用同一个实例,建议考虑改成class(引用类型),可以避免值拷贝带来的修改不同步问题。
  • 你结构体里的Add方法已经做了firststructlist的空判断,即使是用默认无参构造创建的实例调用Add也不会报空引用异常,这块逻辑是没问题的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:54:01