我想知道是否有可能通过变量来引用一个类字段。像这样:
int variable = 0;
while (variable > 3)
{
class._fieldvariable = something;
i++
}
如果我有字段:_field1,_ field2,_ field3我可以遍历它们。
这样做的主要原因是我有一个sql查询会附加多个记录,而我不是必须多次执行所有参数,而是这样:
while (i < 4)
}
command.Parameters.AddWithValue("@Alpha1", _alphai01.ToString());
i++
}
让我用_alpha101设置参数3次,_alpha201和_alpha301用于三个不同的查询。
谢谢!
答案 0 :(得分:1)
将属性与字段相关联,所有这些字段都具有get / set访问权限。
如果我们真的在讨论三个字段,那么或多或少干净的方法是使用函数 GetField(int index)
来返回相应的属性。然后你的代码可以是
class.GetField(i) = something;
数组在更一般的情况下更好(例如,如果预计字段数会发生变化)。
我宁愿不将反射用于这么简单的目的。
答案 1 :(得分:0)
您可以使用invokeMember
来调用某个属性的某个setter:
Object obj; //your instance;
obj.GetType().InvokeMember("Alpha1",
BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
Type.DefaultBinder, obj, "ValueForAlpha1");
等于
obj.Alpha1 = "ValueForAlpha1";
http://msdn.microsoft.com/en-US/library/vstudio/66btctbe.aspx
答案 2 :(得分:0)
你可以使用像这样的反射
如果您有A类
public class A
{
int field1, field2, field3;
}
您可以像这样设置这些字段
A obj = new A();
for (int i = 1; i < 4; i++)
{
FieldInfo field = obj.GetType().GetField(String.Format("field{0}", i), BindingFlags.NonPublic | BindingFlags.Instance);
if (null != field)
{
field.SetValue(obj, i);
}
}