Nullable Class 微软介绍:
Nullable Class
定义
命名空间:
System
Assemblies:
System.Runtime.dll, mscorlib.dll, netstandard.dll
支持可分配有 null 的值类型。 此类不能被继承。
[System.Runtime.InteropServices.ComVisible(true)]
public static class Nullable
继承:
Object->Nullable
属性:
ComVisibleAttribute
注解:
一种类型称为可为 null,如果它可以分配一个值,或者可以分配null,这意味着该类型有没有任何值。 默认情况下,所有的引用类型,如String,可以为 null,但所有值类型,如Int32,不是。
通过使用 C# 和 Visual Basic 中,在标记为可为 null 的值类型?后的值类型的表示法。 例如, int? C# 中或Integer?在 Visual Basic 中声明了整数值类型,可以分配null。
Nullable类提供了补充支持Nullable<T>结构。 Nullable类支持获取基础类型的为 null 的类型,并对其基础值类型可以为 null 的类型的比较和相等操作不支持泛型比较和相等运算。
装箱和取消装箱:
可以为 null 的类型进行装箱时,公共语言运行时自动框的基础值Nullable<T>对象,而不Nullable<T>对象本身。 也就是说,如果HasValue属性是true,内容Value属性进行装箱。 如果HasValue属性是false,null进行装箱。 未装箱可以为 null 的类型的基础值时,公共语言运行时创建一个新Nullable<T>结构初始化为基础的值。
方法 :
Compare<T>(Nullable<T>, Nullable<T>)
比较两个 Nullable<T> 对象的相对值。
Equals<T>(Nullable<T>, Nullable<T>)
指示所指定的两个 Nullable<T> 对象是否相等。
GetUnderlyingType(Type)
返回指定可以为 null 的类型的基础类型参数。
Nullable<T> Struct 微软介绍:
Nullable<T> Struct
定义
命名空间:
System
Assemblies:
System.Runtime.dll, mscorlib.dll, netstandard.dll
表示可分配有 null 的值类型。
[Serializable]
public struct Nullable<T> where T : struct
类型参数
T
Nullable<T> 泛型类型的基础值类型。
继承
Object->ValueType->Nullable<T>
属性
SerializableAttribute
示例
下面的代码示例定义 Microsoft Pubs 示例数据库中表的三个行。 该表包含两个不可为 null 的列和两个都可以为 null 的列。
using System;
class Sample
{
// Define the "titleAuthor" table of the Microsoft "pubs" database.
public struct titleAuthor
{
// Author ID; format ###-##-####
public string au_id;
// Title ID; format AA####
public string title_id;
// Author ORD is nullable.
public short? au_ord;
// Royalty Percent is nullable.
public int? royaltyper;
}
public static void Main()
{
// Declare and initialize the titleAuthor array.
titleAuthor[] ta = new titleAuthor[3];
ta[0].au_id = "712-32-1176";
ta[0].title_id = "PS3333";
ta[0].au_ord = 1;
ta[0].royaltyper = 100;
ta[1].au_id = "213-46-8915";
ta[1].title_id = "BU1032";
ta[1].au_ord = null;
ta[1].royaltyper = null;
ta[2].au_id = "672-71-3249";
ta[2].title_id = "TC7777";
ta[2].au_ord = null;
ta[2].royaltyper = 40;
// Display the values of the titleAuthor array elements, and
// display a legend.
Display("Title Authors Table", ta);
Console.WriteLine("Legend:");
Console.WriteLine("An Author ORD of -1 means no value is defined.");
Console.WriteLine("A Royalty % of 0 means no value is defined.");
}
// Display the values of the titleAuthor array elements.
public static void Display(string dspTitle,
titleAuthor[] dspAllTitleAuthors)
{
Console.WriteLine("*** {0} ***", dspTitle);
foreach (titleAuthor dspTA in dspAllTitleAuthors) {
Console.WriteLine("Author ID ... {0}", dspTA.au_id);
Console.WriteLine("Title ID .... {0}", dspTA.title_id);
Console.WriteLine("Author ORD .. {0}", dspTA.au_ord ?? -1);
Console.WriteLine("Royalty % ... {0}", dspTA.royaltyper ?? 0);
Console.WriteLine();
}
}
}
// The example displays the following output:
// *** Title Authors Table ***
// Author ID ... 712-32-1176
// Title ID .... PS3333
// Author ORD .. 1
// Royalty % ... 100
//
// Author ID ... 213-46-8915
// Title ID .... BU1032
// Author ORD .. -1
// Royalty % ... 0
//
// Author ID ... 672-71-3249
// Title ID .... TC7777
// Author ORD .. -1
// Royalty % ... 40
//
// Legend:
// An Author ORD of -1 means no value is defined.
// A Royalty % of 0 means no value is defined.
注解
一种类型称为可为 null,如果它可以分配一个值,或者可以分配null,这意味着该类型有没有任何值。 默认情况下,所有的引用类型,如String,可以为 null,但所有值类型,如Int32,不是。
通过使用 C# 和 Visual Basic 中,在标记为可为 null 的值类型?后的值类型的表示法。 例如, int? C# 中或Integer?在 Visual Basic 中声明了整数值类型,可以分配null。
Nullable<T>结构为 null 的类型使用值类型,因为引用类型都可以为 null 的设计的支持。
Nullable类提供了补充支持Nullable<T>结构。 Nullable类支持获取基础类型的为 null 的类型,并对其基础值类型可以为 null 的类型的比较和相等操作不支持泛型比较和相等运算。
基本属性
两个基本成员Nullable<T>结构是否HasValue和Value属性。 如果HasValue属性Nullable<T>对象是true,可以使用访问对象的值Value属性。 如果HasValue属性是false,该对象的值是不确定并尝试访问Value属性,则会引发InvalidOperationException。
装箱和取消装箱
可以为 null 的类型进行装箱时,公共语言运行时自动框的基础值Nullable<T>对象,而不Nullable<T>对象本身。 也就是说,如果HasValue属性是true,内容Value属性进行装箱。 未装箱可以为 null 的类型的基础值时,公共语言运行时创建一个新Nullable<T>结构初始化为基础的值。
如果HasValue属性为 null 的类型是false,装箱操作的结果是null。 因此,如果可以为 null 的装箱的类型传递给需要的对象参数的方法,该方法必须准备处理其中的参数是这种情况null。 当null是未装箱到 null 的类型,公共语言运行时创建一个新Nullable<T>结构并初始化其HasValue属性设置为false。
.NET Framework 4.5.1 和 Windows 运行时组件
从开始.NET Framework 4.5.1,可以包括Nullable<T>类型作为结构导出 WinMD 库中的成员。 以前,这不是支持。
构造函数:
Nullable<T>(T)
将 Nullable<T> 结构的新实例初始化为指定值。
属性:
HasValue
获取一个值,该值指示 Nullable<T> 对象是否具有基础类型的有效值。
Value
获取当前 Nullable<T> 对象的值,如果它已被分配了有效的基础值。
方法:
Equals(Object)
指示当前 Nullable<T> 对象是否与指定的对象相等。
GetHashCode()
检索由 Value 属性返回的对象的哈希代码。
GetValueOrDefault()
检索当前 Nullable<T> 对象的值,或基础类型的默认值。
GetValueOrDefault(T)
检索当前 Nullable<T> 对象的值或指定的默认值。
ToString()
返回当前 Nullable<T> 对象的值的文本表示形式。
操作员:
Explicit(Nullable<T> to T)
定义 Nullable<T> 实例到其基础值的显式转换。
Implicit(T to Nullable<T>)
创建一个新的 Nullable<T> 对象,并将其初始化为指定的值。
可空类型如何安全地转换为非可空类型?
1.强制类型转换
不安全
2.空接合操作符(??)
C#在新版本中加入了一个新的操作符,它被称为空接合操作符,使用如下的格式:
returnValue = first ?? second; |
这样,如果first不为空,那么它的值将返回作为returnValue的值。如果first为空,那么second的值将被返回。注意:returnValue可以为可空变量或者非可空变量。
如果你希望可空变量的值到一个非可空的版本,你可以这样做:
int? ValA= 123; int? ValB = null; int NewVarA = ValA ?? -1; int NewVarB = ValB ?? -1; |
NewVarA的值将会为123因为ValA不是空值。NewVarb的值是-1因为ValB是空值。你看一看到,这里你将可以将变量从一个空值转化成一个缺省值。这里缺省值是-1。