如何在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);
谁有任何想法,如何得到这个工作?
谢谢!
使用数组,而不是反射:
public class MyClass()
{
private void SetAValiable(int boolNumber)
{
bool[] b = new bool[2]; //will default to false values
b[boolNumber] = true;
}
}
不可能像你想做的那样使用反射来访问局部变量。它们需要是字段才能成为一个选项,但即使这样它仍然不是右选项。
首先,b1
和b2
不是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;
}