[英]How can check null value in nullable type in C#?
如何检查可空类型的空值?
这是我的代码
public int? ContractYear
{
get
{
if (Dates.FindIndex((Date d) => d.Type == DateType.Issue) == -1)
return null;
return DateTime.Now.Year -
Dates.First((Date d) => d.Type == DateType.Issue).Year.Value;
}
}
在上面的代码中, Date
是自定义类型,在我的代码中具有Year属性,而Dates
是Date
反对的集合。 它们的定义方式如下:
public List<Date> Dates // initialized elsewhere
public class Date
{
public DateType Type { get; set; } //DateType is an enum
public int? Year { get; set; }
//additional properties
}
在.Year.Value
行中,我收到错误消息,因为如果year可以为null
则无法获得year的值,它将抛出“ Nullable对象必须具有值”
现在如何检查该错误。
您可以使用yournullableType检查值。 HasValue检查是否具有hasValue
每个可空类型的实例都有两个公共的只读属性: HasValue HasValue的类型为bool。 当变量包含非空值时,将其设置为true。 值值与基础类型相同。 如果HasValue为true,则Value包含有意义的值。 如果HasValue为false,则访问Value将引发InvalidOperationException。
喜欢
int? x = 10;
if (x.HasValue)
{
System.Console.WriteLine(x.Value);
}
else
{
System.Console.WriteLine("Undefined");
}
要回答您的问题,当Year
为空时,您会收到错误消息。 使用可为空的类型时,如果值为null则调用Value
属性将引发异常。
为了避免这种情况,您需要使用HasValue
属性并在调用Value
之前对其进行检查。 但是,您需要决定如何处理此特定问题,特别是Year为空时您想做什么?
public int? ContractYear
{
get
{
var firstIssueDate = Dates.FirstOrDefault((Date d) => d.Type == DateType.Issue);
if (firstIssueDate == null)
{
return null;
}
else if (firstIssueDate.Year.HasValue)
{
return DateTime.Now.Year - firstIssueDate .Year.Value;
}
else
{
return ???
//this is what you need to decide,
// what do you want to return when Year is null?
}
}
}
关于Year
为空的情况,还有其他选择,这取决于发生这种情况时要返回的内容。 另一个非常常见的模式是条件运算符( ?:
return DateTime.Now.Year -
firstIssueDate.Year.HasValue ? firstIssueDate.Year.Value : 0;
// you can replace the 0 above with whatever
// value you want to use in lieu of a null Year.
可空类型是System.Nullable结构的实例。 可空类型可以表示其基础值类型的正确值范围,以及附加的空值。 例如,可以为Nullable(发音为“ Int32的Nullable”)分配从-2147483648到2147483647之间的任何值,也可以为其分配空值。
static void Main()
{
int? num = null;
// Is the HasValue property true?
if (num.HasValue)
{
System.Console.WriteLine("num = " + num.Value);
}
else
{
System.Console.WriteLine("num = Null");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.