首页 > 解决方案 > 通过 C# Getter Setter 属性获取值返回 Null

问题描述

我有一个Login.cs类,我在其中设置了如下属性。

private string Username_;
private string Password_; 

public string UserName
{
    get => Username_;
    set => Username_ = value; 
}
public string Password
{
    get => Password_; 
    set => Password_ = value; 
}

并将两个属性的值设置在同一类中,如下所示。

UserName = "admin";
Password = "admin";

其中Username_&Password_都是strings。现在我有另一个Usercontrol我正在访问的MainWindow按钮单击,如下所示。

<vm:ViewUsers x:Name="ViewAllUsers" Visibility="Hidden"/>

我在 UserControl 后面的代码中所做的是如下访问UsernamePassword通过Property Getter Setter如下的值。

string username = Login.GetInstance().UserName;
string password = Login.GetInstance().Password;

在调试obj.UserName;属性上返回 Null。为什么它返回 null,我应该如何解决这个问题?

标签: c#nullsettergetter

解决方案


问题是您在Login()获取属性之前创建了一个新实例:

// Code originally in the question
Login obj = new Login();

现在已更改为Login.GetInstance(),但我们不知道该方法的作用。如果Login方法每次都返回对新实例的引用,那么我们就会遇到同样的问题。

该对象中的两个属性都将为空,因为您尚未将它们设置为任何值。(所有引用类型的默认值为 null。)我不清楚您将属性设置为任何其他值的位置,但无论您设置它们的对象与您当时使用的对象不同在您向我们展示的最后一段代码中。

您需要确保可以在称为“setter”的同一对象上使用“getter”。

顺便说一句,由于您的属性很简单(它们只是获取和设置变量,没有其他行为,例如验证),您可以将所有第一段代码替换为自动实现的属性:

public string UserName { get; set; }
public string Password { get; set; }

推荐阅读