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
相关产品推荐
相关产品推荐

