C# 声明变量加?问号,DateTime D与DateTime? D区别
这是新的语法,表示可空值类型。
如Int32、结构体等这样的类型是不可能为空的,常见的如int,DateTime都是不可能为空的。所以在需要判断是否有值的场合,可以用加问号的可空值类型,如int?,DateTime?
这时,变量可以为空(null),并且可以通过它的HasValue属性来判断是否有值,并通过Value属性获得真正的值。
它可以通过对包装类型直接赋值的方式隐式创建,如:
int? a=32;
可空类型?与可空类型默认值
using System;
using System.Collections.Generic;
using System.Text;
namespace
{
class Program
{
static void Main(string[] args)
{
int? variablea = null;
Console.WriteLine(variablea.HasValue);
//下面此条语句错误,可为空的对象必须有一个值
// Console.WriteLine(variablea.Value);
int? a = 1;
Console.WriteLine(a.HasValue);
int variableb = variablea ?? 5;
Console.WriteLine(variableb);
//下面此条语句错误,可为空的对象必须有一个值
//Console.WriteLine(variablea.Value);
Console.WriteLine(variablea.HasValue);
variablea = 6;
Console.WriteLine(variablea);
Console.WriteLine(variablea.Value);
Console.WriteLine(variablea.HasValue);
//以下错误,无法将类型“int?”隐式转换为“int”。存在一个显式转换(是否缺少强制转换?)
E:\VisualC#2005技术内幕\1-2单元\P29 可空类型\可空类型\Program.cs 34 20 可空类型
//int b = variablea;
//必须用??
int b = variablea ?? 6;
Console.WriteLine(b);
Console.ReadLine();
}
}
}
c#中:int ? counts=0;
?表示counts是可空类型。
可空类型是System.Nullable结构体的实列。一个可空类型代表了相应值类型的正确范围附加null值。例如 Nullable<Int32>的取值范围应该是-2147483648到2147483647外加null。 Null<bool>的取值为true,false和null。这种方法一般在处理数据库的时候用到,因为数据库里面可能含有没有赋值的值类型。
int? num = null;
可空类型具有如下的属性:
·可空类型只能应用于值类型,引用类型因为已经支持了null而不能被使用。
·T?是System.Nullable<T>的缩写,这里T是一个值类型。这两种格式是可以互换的。
·可以像使用普通类型一样使用可空类型。例如int? x = 10;或者double? d = 40108;
·使用System.Nullable.GetValueOrDefault还获得值,或者当它为空的时候获得默认值。
·使用HaseValue和Value只读属性来测试它是不是空并且返回相应的非空值。
·如果含有值那么HaseValue返回真,否则返回假。
·如果含有值那么Value返回值,否则抛出System.InvalidOperationException异常。
·HaseValue默认值为假,Value默认为未定义。
·当向值类型获得可空类型的值得时候,使用??运算符来赋予一个可空类型一个默认值。例如:int? x = null; int y = x ?? -1;
·不可以嵌套可空类型。Nullable<Nullabel<int>> n;将会抛出异常。