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

本文关键字:动态 设置 变量 | 更新日期: 2023-09-27 18:03:47

我想做这样的事情:

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);

谁有任何想法,如何得到这个工作?

谢谢!

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

使用数组,而不是反射:

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

不可能像你想做的那样使用反射来访问局部变量。它们需要是字段才能成为一个选项,但即使这样它仍然不是选项。

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

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

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

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

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;
}