C# 声明变量加?问号,DateTime D与DateTime? D区别
作者:C/S框架网  发布日期:2011/07/25 12:58:33
C# 声明变量加?问号,DateTime D与DateTime? D区别

这是新的语法,表示可空值类型。


如Int32、结构体等这样的类型是不可能为空的,常见的如int,DateTime都是不可能为空的。所以在需要判断是否有值的场合,可以用加问号的可空值类型,如int?,DateTime?


这时,变量可以为空(null),并且可以通过它的HasValue属性来判断是否有值,并通过Value属性获得真正的值。
它可以通过对包装类型直接赋值的方式隐式创建,如:
int? a=32;


可空类型?与可空类型默认值


C# Code:

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;将会抛出异常。


上一篇 下一篇