引用带变量的字段

时间:2013-05-07 14:17:08

标签: c#

我想知道是否有可能通过变量来引用一个类字段。像这样:

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用于三个不同的查询。

谢谢!

3 个答案:

答案 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);
            }

        }