检查是否设置了class属性

Check if class property has been set

假设我有一个用户 class

public Class User
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int Level {get;set;}
}


User user1 = new User();
user1.Name = "name";
user1.Surname = "Surname";
user1.Level = 0;

User user2 = new User();
user2.Name = "name";
user2.Surname = "Surname";

当我检查 user1.Level == user2.Level 时,它 returns true 因为默认 int 值为 0

那么有什么办法可以让我理解 user2 的级别 属性 没有设置,所以我可以说这两个不相同?

使用Nullable

public Class User
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int? Level {get;set;}
}

它的默认值为 null 而不是值 0。

有关 Nullable 的更多信息,请查看 msdn documentation

1)如果用int?作为Level的类型,不设置时为NULL。

public Class User
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int? Level {get;set;}
}

2) 你可以使用level属性的setter并在设置新值时设置一个布尔值,如果其他建议的解决方案不适合你。示例:

public Class User
{
    public string Name { get; set; }
    public string Surname { get; set; }
    private int _Level;
    public int Level
    { 
      get { return _Level; } 
      set { _Level= value; _hasLevel = true; } 
    }

    public bool HasLevel { get { return _hasLevel; } }
}

您可以更改 class 以使级别可为空。

public class User
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int? Level {get;set;}
}

另一个选项(除了建议的其他选项之外)是在 class 构造函数中将值设置为 0 以外的值。通常使用 -1

public Class User
{
    public User() 
    {
        Level = -1;
    }

    public string Name { get; set; }
    public string Surname { get; set; }
    public int Level {get;set;}
}