繁体   English   中英

检查是否设置了类属性

[英]Check if class property has been set

假设我有一个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属性,以便可以说这两个不相同?

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

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

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

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

使用Nullable

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

默认情况下,它将具有null而不是0。

有关Nullable更多信息,请参阅msdn文档

您可以更改类以使Level为可为空。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM