检查是否已设置类属性

时间:2015-02-13 08:53:41

标签: c# equality setter getter

让我们假设我有一个User类

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时,它返回true,因为默认int值为0

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

4 个答案:

答案 0 :(得分:2)

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; } }
}

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

使用Nullable

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

默认值为null而不是值0。

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

答案 3 :(得分:0)

您可以更改您的课程以使等级可以为空。

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