如何在C#中的类中动态设置变量的值?

时间:2014-05-16 17:28:49

标签: c# reflection

我正在尝试做这样的事情:

public class MyClass()
{
  private void SetAValiable(int boolNumber)
  {
    bool b1 = false;
    bool b2 = false;

    ("b" + boolNumber) = true;
  }
}

我已经尝试了这个但是不断从GetProperty调用中获取null:

Type myType = typeof(MyClass);
PropertyInfo pinfo = myType.GetProperty("b" + boolNumber);
pinfo.SetValue(myType, true, null);

任何人都有任何想法如何让这个工作?

谢谢!

3 个答案:

答案 0 :(得分:7)

使用数组,而不是反射:

public class MyClass()
{
    private void SetAValiable(int boolNumber)
    {
        bool[] b = new bool[2]; //will default to false values
        b[boolNumber] = true;
    }
}

当您尝试执行时,无法使用反射来访问局部变量。他们需要成为一个选项的领域,但即便如此,它仍然不会是正确的选项。

答案 1 :(得分:0)

首先,b1b2不是MyClass的成员。这就是你得到null的原因。 你需要这样的东西:

public class MyClass()
{
     private bool b1;
     private bool b2;
}

其次,setValue的第一个参数需要是类MyClass的一个实例。在您的示例中,它是Type的实例。

答案 2 :(得分:-1)

如果您对所描述的方式感兴趣,那么您有两个选择,首先是您可以使用静态字段,但如果您不能使用静态字段,则反射的工作方式如下:

public T Reflect<T, X> (X Value, int i) { 
   var Fields = typeOf(T).GetFields();
   var obj = Activator.CreateInstance<T>(); // let's say you cant create the object the normal way
   Fields[i].setValue(obj, Value);
// then you can cast obj to your type and return it or do whatever you wanna do with it
   return (T) obj;
}