我正在尝试做这样的事情:
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);
任何人都有任何想法如何让这个工作?
谢谢!
答案 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)
首先,b1
和b2
不是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;
}