繁体   English   中英

C#:FieldInfo.GetValue返回null

[英]C# : FieldInfo.GetValue returns null

我有一个问题需要通过Reflection检索变量o中的控件f2:

public partial class Form1 : Form
{
    private Form2 f2;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.Show();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Type controlType = this.GetType();
        FieldInfo f = controlType.GetField("f2", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
        object o = f.GetValue(this); // o == null;
    }
}

那是因为您在button1_Click创建了一个名为f2的局部变量,但从未将类成员f2设置为该新实例:

private void button1_Click(object sender, EventArgs e)
{
    // Creates a new variable called f2 that is local to the function
    Form2 f2 = new Form2();

    // To store the local instance to the class member, you need to un-comment
    // this.f2 = f2;        
    // or change the previous line of code to:
    // f2 = new Form2();

    // Show the local form
    f2.Show();
}

因此,在类级别f2存在空值。

我还假设您在此示例中只是在玩反射。 如果这不是严格的反射测试,则应直接引用this.f2而不是通过反射。

FieldInfo myf = typeof(Form1).GetField("f2");
   Console.Writeline(myf.GetValue(this));

应该为你工作!

您没有设置私有字段f2的值。 相反,您正在创建一个名为f2的局部变量。 代替此代码:

Form f2 = new Form();

采用:

f2 = new Form();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM