从字符串创建对象名称

时间:2009-04-09 14:55:10

标签: c# reflection loops

假设我想遍历一个datareader并创建一个特定类型的对象加载,但是使用datareader中的值作为对象名称,例如。

String "string_" + <value from datareader> = new String();

所以,如果我有值temp1,temp2&amp; temp3从datareader出来我将有3个类型为string的新对象,例如

string_temp1
string_temp2
string_temp3

如何使用datareader中的名称创建对象?或者是否有更好的方法可以做到这一点?

2 个答案:

答案 0 :(得分:11)

我认为使用映射你希望对象拥有的名称的Dictionary更容易使用反射,而不是使用反射:

var map = new Dictionary<String, String>();
map[...] = new String();
//   ^
//   |
//   +---- substitute with whatever naming scheme you deem suitable

答案 1 :(得分:2)

这样做没什么价值。如果从值创建变量NAME,则无法在此后的代码中引用该变量,因为代码是在编译时编译的,并且您尝试在运行时设置变量名。

请记住,变量名实际上只是让编译器能够映射到IL,并最终正确地进行JIT。这就是混淆工作的原因 - 大多数混淆器所做的主要事情之一就是将所有变量名称变成非常简短,毫无意义的名称。这对运行时行为没有影响 - 编译后名称毫无意义。

我建议采用John Feminella的方法,或类似的东西。