用变量引用字段

本文关键字:字段 引用 变量 | 更新日期: 2023-09-27 18:12:32

我想知道是否可以通过变量引用类字段。像这样:

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

谢谢!

用变量引用字段

将属性与字段关联,所有属性都具有get/set访问权限。

如果我们真的在谈论三个字段,一个或多或少干净的方法是使用函数 GetField(int index),它将返回相应的属性。然后你的代码可以是

class.GetField(i) = something;

数组在更一般的情况下更好(例如,如果字段的数量预计会改变)。

您可以使用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

你可以像这样使用反射

如果你有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);
            }
        }