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

emk*_*emk 10 c# oop

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

CustomObj fooObj;
CustomObj barObj;
CustomObj bazObj;
Run Code Online (Sandbox Code Playgroud)

我有一个字符串数组:

string[] stringarray = new string[] {"foo","bar","baz"};
Run Code Online (Sandbox Code Playgroud)

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

foreach (string i in stringarray) {
    `i`Obj = new CustomObj(i);
}
Run Code Online (Sandbox Code Playgroud)

希望我想要了解的想法很清楚.这可能在C#中吗?

提前致谢.

Jon*_*eet 32

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

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

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

foreach (string name in stringArray)
{
    map[name] = new CustomObj(name);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用索引器访问对象到字典.

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

  • 我认为这个回应应该获得"直觉客户真正想要的"奖励.好答案 (4认同)