我正在验证一些属性,我需要知道其他层是否设置了长整数值.
例如,这个类::
public class Person
{
public int Age {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
当我设置的新实例人的年龄得到值0.但我要验证,如果年龄分别设置,因为年龄可以为零(不,当然这种情况下).
我想到的一个解决方案是使用int作为可空整数(public int?Age),并在Person的构造函数中将Age设置为null.
但我试图避免它,因为我必须更改太多的类只是为了检查Age.HasValue并将其用作Age.Value.
有什么建议?
Are*_*ren 21
Int默认初始化为0; 假设您不想使用int?哪种方式适合您.你可以检查,或者你可以有一个标志和一个支持字段:
private int _age;
public int Age
{
get { return _age; }
set { _age = value; _hasAge = true; }
}
public bool HasAge { get { return _hasAge; } }
Run Code Online (Sandbox Code Playgroud)
如上所述,您可以将其初始化为无效状态:
private int _age = -1;
public int Age
{
get { return _age; }
set { _age = value; _hasAge = true; }
}
public bool HasAge { get { return _age != -1; } }
Run Code Online (Sandbox Code Playgroud)
或者只是分解并使用 int?
public int? Age { get; set; }
public bool HasAge { get { return Age.HasValue; } }
Run Code Online (Sandbox Code Playgroud)
为了与代码向后兼容,您可以在int?不暴露它的情况下将其备份:
private int? _age;
public int Age
{
get { return _age.GetValueOrDefault(-1); }
set { _age = value; }
}
public bool HasAge { get { return _age.HasValue; } }
Run Code Online (Sandbox Code Playgroud)
有没有一个字段(或自动实现的属性)已相差明确设置为默认值,并且从来没有设置一个.
A Nullable<int>绝对是走到这里的方式 - 但是您需要考虑使用最干净的API.
例如,您可能需要:
public class Person
{
private int? age;
public int Age
{
// Will throw if age hasn't been set
get { return age.Value; }
// Implicit conversion from int to int?
set { age = value; }
}
public bool HasAge { get { return age.HasValue; } }
}
Run Code Online (Sandbox Code Playgroud)
这将允许您Age直接在假设已经设置的地方阅读- 但是当他们想要小心时测试它.
| 归档时间: |
|
| 查看次数: |
27947 次 |
| 最近记录: |