2

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

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

谢谢!

4

3 回答 3

1

将属性与字段相关联,它们都具有获取/设置访问权限。

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

class.GetField(i) = something;

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

我不希望将反射用于如此简单的目的。

于 2013-05-07T14:24:58.623 回答
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);
            }

        }
于 2013-05-07T14:40:19.887 回答
0

您可以使用invokeMember调用某个属性的特定设置器:

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

于 2013-05-07T14:24:43.773 回答