设置后,属性立即变为null

时间:2015-01-03 16:41:42

标签: c# nullreferenceexception

在我的程序中,我有一个控制器,它根据用户请求创建新表单和将由这些表单使用的新对象。简而言之,这就是:

ClientForm clientForm = new ClientForm();
Client client = new Client();
clientForm.SetClient( client );
clientForm.Show();

SetClient做了一些明显的事情:

Client _client;

public ClientForm()
{
    InitializeComponent();
}

public void SetClient( Client client )
{
    this._client = client;
}

如果我在_client中尝试使用SetClient,一切正常,但如果我尝试在事件处理程序中使用它,我会得到NullReferenceException并且,事实上,简单的if检查表明_clientnull

为什么会这样?是超出范围还是什么?我该如何防止这种情况?

1 个答案:

答案 0 :(得分:2)

我发布了一个答案,所以问题不会在没有答案的情况下停留。

我通常不喜欢在这里复制粘贴代码,因为我不是来这里要求其他人阅读我的代码并发现语法错误/拼写错误等 - 或者至少我尝试过。

因此,我删除了所有额外内容的代码,并确保使用简单版本重现该错误。然后我重新阅读它,以确保它看起来很好,易于阅读,我看到了它。

我在Main做了一些事情,因为这是为了测试一些想法而制作的一个程序。

static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault( false );

            LauncherForm launcher = new LauncherForm();
            Client client = new Client( "test" );

            launcher.SetClient( client );

            Application.Run( new LauncherForm() );

        }
    }

就在这里,主演我的眼睛:Application.Run( new LauncherForm() );应该是Application.Run( launcher );

这可以通过评论中有人建议的.GetHashCode解决方案进行观察(解决方案我确定从现在开始使用此类事情时会发生这种情况,所以谢谢)。我的简单方法(查看_clientSetClient的方式)是错过了这一点。