WPF C# System.NullReferenceException:“对象引用未设置为对象的实例。[复制]

WPF C# System.NullReferenceException: 'Object reference not set to an instance of an object.' [duplicate]

提问人:ElaVnla 提问时间:5/9/2022 更新时间:5/9/2022 访问量:2164

问:

我正在使用 WPF .net 5.0 框架。我正在尝试显示我传递到文本框中的值,以便用户编辑当前值。

这是代码

    public EditUserDetailsPage1(User user)
    {
        InputFullName.Text = user.Full_Name;
        InputFirstName.Text = user.First_Name;
        InputLastName.Text = user.Last_Name;
        InputEmail.Text = user.Email;
        inputUsername.Text = user.Username;
        InitializeComponent();
    }

这是 XAML

<TextBox Style="{StaticResource TextBoxExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="Full Name " VerticalAlignment="Top" hc:InfoElement.Placeholder="Enter full name" Margin="24,75,564,0" Name="InputFullName"/>
<TextBox Style="{StaticResource TextBoxExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="First Name  " VerticalAlignment="Top" hc:InfoElement.Placeholder="Enter First Name" Margin="439,75,296,0" Name="InputFirstName"/>
<TextBox Style="{StaticResource TextBoxExtend}" hc:TitleElement.TitlePlacement="Left" hc:TitleElement.Title="Last Name   " VerticalAlignment="Top" hc:InfoElement.Placeholder="Enter last Name" Margin="709,75,26,0" Name="InputLastName"/>
<TextBox Style="{StaticResource TextBoxExtend}" hc:TitleElement.TitlePlacement="Left" hc:TitleElement.Title="Email" VerticalAlignment="Top" hc:InfoElement.Placeholder="[email protected]" Margin="24,142,564,0" Name="InputEmail"/>
<TextBox Style="{StaticResource TextBoxExtend}" hc:TitleElement.TitlePlacement="Left" hc:TitleElement.Title="Username" VerticalAlignment="Top" hc:InfoElement.Placeholder="Enter username" Margin="439,142,253,0" x:Name="inputUsername"/>

我一直在其他页面中使用这种方法,它工作得很好。但是对于这个页面,它给了我这个错误

System.NullReferenceException:“对象引用未设置为对象的实例。

我尝试了其他方法,例如先声明它

    User passeduser;
    public EditUserDetailsPage1(User user)
    {

        passeduser = user;

        InputFullName.Text = passeduser.Full_Name;
        InputFirstName.Text = passeduser.First_Name;
        InputLastName.Text = passeduser.Last_Name;
        InputEmail.Text = passeduser.Email;
        inputUsername.Text = passeduser.Username;
        InitializeComponent();
    }

正如你在这里看到的,有一个值正在被检索enter image description here

但它仍然给我一个错误。我遵循了用于其他页面的相同方法,它似乎不适用于此页面。非常感谢任何帮助!

C# WPF .Net-5 NullReferenceException

评论

1赞 The Lemon 5/9/2022
接受的答案是正确的,但仅针对通用的 null 异常建议 - 如果您希望它即使在 user 为 null 时也能工作,您可以使用诸如“user?”之类的表达式。Full_Name ??“无用户”'。这?。如果左侧为 null,则 expression 返回 null,而不是引发异常。这??如果左侧为 null,则返回右侧值。还建议在可能像这样失败的方法周围放置一个 try{}catch{} 异常,因此如果用户遇到问题,他们会看到“提供的用户无效”而不是“对象未设置为实例”

答:

2赞 Loocid 5/9/2022 #1

这是因为您在创建它之前就尝试使用它。InputFullName

在 WPF 中,UI 元素是在运行 时创建的。InitializeComponent

请尝试以下操作:

public EditUserDetailsPage1(User user)
{
    InitializeComponent();

    InputFullName.Text = user.Full_Name;
    InputFirstName.Text = user.First_Name;
    InputLastName.Text = user.Last_Name;
    InputEmail.Text = user.Email;
    inputUsername.Text = user.Username;
        
}

评论

1赞 John 5/9/2022
为了强调这一点,调用应该始终是您在 WPF 窗口或 WinForms 表单构造函数中执行的第一件事。默认构造函数已经包含调用,您应该在它后面放置自己的初始化代码。如果添加带参数的构造函数,但保留无参数构造函数,请将调用保留在无参数构造函数中,并让新构造函数调用它。InitializeComponent