c# - 在实例化对象时以编程方式使用字符串作为对象名称

标签 c# oop

这是一个人为的例子,但可以说我已经声明了对象:

CustomObj fooObj;
CustomObj barObj;
CustomObj bazObj;

我有一个字符串数组:

string[] stringarray = new string[] {"foo","bar","baz"};

我如何使用字符串数组以编程方式访问和实例化这些对象,并使用类似 foreach 的东西进行迭代:

foreach (string i in stringarray) {
    `i`Obj = new CustomObj(i);
}

希望我试图传达的想法是清楚的。这在 C# 中可能吗?

最佳答案

您需要清楚对象和变量之间的区别。对象本身没有名称。变量名是在编译时决定的。除非通过反射,否则不能通过执行时确定的名称访问变量。

听起来你真的只是想要一个Dictionary<string, CustomObj> :

Dictionary<string, CustomObj> map = new Dictionary<string, CustomObj>();

foreach (string name in stringArray)
{
    map[name] = new CustomObj(name);
}

然后您可以使用字典的索引器访问对象。

如果您真的想在执行时根据变量名设置变量值,则必须使用反射(参见 Type.GetField )。请注意,这不适用于局部变量。

关于c# - 在实例化对象时以编程方式使用字符串作为对象名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/314008/

相关文章:

c# - Xamarin 表单读取本地 json 文件并显示在选择器中

c# - 可以使用 EF 通过单个查询来查询我的案例吗? (实体的条件和嵌套实体的条件)

javascript - 子类不起作用,为什么?

java - 如何使用我创建的对象实例加载 ArrayList

c# - Java 中有类似 C# Task 的东西吗?

c# - FileSystemWatcher Changed 事件不会触发

php - OOP设计题

c# - 构造函数重构中的虚方法调用

Java 对象拆卸模式

C#消息框最小化问题