`
ljl_xyf
  • 浏览: 634061 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

浅谈C#定义Nullable类型

    博客分类:
  • c#
阅读更多

在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常。在C#2.0中,微软提供了Nullable类型,允许用它定义包含null值(即空值)的数据类型,这对处理数据库中包含可选字段以及很多方面都有很大帮助。

 

C#定义Nullable类型

C#定义Nullable类型非常类似于定义一个非Nullable类型。不同之处在于使用类型修饰符“?”。

 

比如定义一个整型如下:

int myInt = 1;

 

要使一个整型变量可以存储一个null值,可以如下声明:

int? myNullableInt = 1;

 

     这两个变量看起来似乎是一样的。但事实并非如此。实际上,Nullable类型是一个结构体,它有两个公开可读字段:HasValue和Value。

      HasValue是一个布尔值,当有值存储时它为真,当变量值为null时HasValue为假。当HavValue为真是时,可以取得变量的值;为假时,当尝试取得变量的值时会抛出一个异常。

 

     现在null是C#的一个关键字,它可以被赋给一个Nullable型变量。下面是对Nullable型变量赋值的两种有效方式。

double? myDouble = 3.14159;

double? myOtherDouble = null;
 

 

可以看到,myDouble被赋给一个值,它也可以被赋以null。在第二个语句中,myOtherDouble被初始化为null——在一个 非Nullable型变量中这样做会产生异常。

使用Nullable类型 一个Nullable型变量可以像一般值类型那样使用。在编译过程中Nullable型变量和非Nullable型变量会进行隐式转换。就是说我们可以把一个标准整型赋给一个整型Nullable变量,反之亦然。参考下面示例代码:

    int? nFirst = null;  
    intSecond = 2;  
    nFirst = Second;  
    // 可以  
    nFirst = 123;  
    // 可以  
    Second = nFirst;  
    //也可以,因为此时nFirst==123 nFirst = null;  
    // 可以  
    Second = nFirst;  
    // 抛出异常, Second 是一个非nullable型变量。  

可以看到,只要一个Nullable型变量的值不是null,它就可以和一个非Nullable型变量交换变量的值。如果包含null值,

就会抛出异常。为避免异常发生,可以利用Nullable型变量的HasValue属性。 if (nFirst.HasValue) Second = nFirst;

如上所示,如果nFirst 含有一个值,这个赋值语句就会运行;否则,就会跳过。

在Nullable值中使用操作符:Lifed Operators 两个相同类型的Nullable类型和非Nullable型变量除了可以相互自动转化之外,还可以通过操作符在它们中进行操作。参考下面代码:

    int ValA = 10;  
    int? ValB = 3;
    int? ValC = ValA * ValB;  

    //ValC==30 int ValA = 10;  
    int? ValB = null;
    int? ValC = ValA * ValB;  

    //ValC==null int ValA = 10;  
    int? ValB = null;
    int? ValC = ValA + ValB;  

    //ValC仍然是null;  

以上介绍C#定义Nullable类型

分享到:
评论

相关推荐

    浅谈C# 中的可空值类型 null

    但是,利用 C# 定义的一个修饰符,可将一个变量声明为一个可空(nullable)值类型。可空值类型在行为上与普通值类型相似,但可以将一个 null 值赋给它。如下所示: 代码如下:int? a = null; // 合法 当把一个变量...

    详解c# 可空类型(Nullable)

    C# 可空类型(Nullable) C# 可空类型(Nullable)是一种特殊的数据类型,可以表示其基础值类型正常范围内的值,再加上一个 null 值。这种类型非常有用,特别是在处理数据库和其他包含可能未赋值的元素的数据类型时...

    C#难点逐个击破(8):可空类型System.Nullable

    在C#编程语言中,可空类型(System.Nullable)是一个重要的特性,它允许开发者为原本不可为空的值类型(如int、double等)赋予null值。这个特性在处理不确定的数据或者在数据库交互(如ADO.NET)时非常有用。在本文...

    C# 类型基础介绍html格式

    C# 类型基础是编程语言C#中的核心概念,它涉及到变量、数据类型、值与引用类型、装箱与拆箱、以及类型转换等多个方面。理解这些基础将有助于你更好地编写高效、可靠的C#代码。 首先,我们来讨论C#中的数据类型。C#...

    深入浅出C#第十一章

    最后,可能会介绍一些C#的高级特性,如动态类型(dynamic)、预处理器指令(#if、#endif等)、可空引用类型(nullable reference types)以及模式匹配(pattern matching),这些都是提升代码灵活性和安全性的重要...

    c#技术c#技术c#技术c#技术

    19. **空引用类型(Nullable Reference Types)**:C# 8.0引入,帮助开发者识别和防止引用类型可能的null引用异常。 20. **异步迭代器(Async Iterators)**:C# 8.0引入,可以异步地生成一系列值,常用于异步数据...

    【C# 基础精讲】C# 数据类型概述

    - 引用类型可以为null,值类型(除了`struct`)不能为null,除非显式声明(如`Nullable<T>`)。 4. 枚举(`enum`)和空类型(`null`) - 枚举是一种特殊的值类型,用于定义一组命名常量,方便代码阅读和维护。 -...

    Nullable转换问题

    在C#中,所有的值类型(如int、bool等)默认情况下是不能赋值为null的。然而,在某些场景下,我们需要能够表示一个值类型的值可能是未知或不存在的情况,这时就需要用到`Nullable<T>`。例如,`Nullable<int>`可以被...

    有关C#可空类型的几个例子(源代码)

    在C#编程语言中,可空类型(Nullable Types)是一个重要的特性,它允许我们为原本非可空的值类型(如int、double等)赋予null值。这在处理数据库、XML或其他可能返回null的场景中非常有用。本教程将通过几个实例深入...

    理解 C#值类型与引用类型 (2).docx

    这意味着,无论使用哪种.NET语言,如C#、VB.NET或F#,它们都可以相互操作,因为它们共享相同的类型定义。CTS确保了类型安全和跨语言的兼容性。在C#中声明的`int`实际上是指向CTS中的`System.Int32`类型的引用。 2. ...

    理解 C#值类型与引用类型.docx

    C#的类型系统是基于.NET Framework的通用类型系统(CTS)构建的,它定义了所有类型的基础,包括值类型和引用类型。CTS确保了在IL层面上的类型安全,并允许不同.NET语言之间的互操作性。例如,声明的`int`实际上是对...

    C# 可空类型分析(含程序代码)

    在C#编程语言中,可空类型(Nullable Types)是一个重要的特性,它允许开发者为原本不可为空的值类型(如int、bool等)赋予null值。这种能力在处理数据库数据或其他可能包含未定义值的场景时尤其有用。下面将详细...

    c# 规范 官方文档

    C# 2.0引入了Nullable类型,允许对值类型进行空值赋值。 3. **控制流**:包括条件语句(if、switch)、循环(for、while、foreach)和跳转语句(break、continue、return)。 4. **方法**:方法是实现特定功能的...

    C#4.0语言规范 C#4.0语言规范C#4.0语言规范

    2. **可空值类型**(Nullable Types):C# 4.0对可空值类型的处理更加完善,扩展了对非引用类型的可空性支持,允许整型、浮点型等基本类型可以表示“无值”状态,解决了一些数据库和接口通信中的问题。 3. **命名...

    ELinq 是一个轻量简单易用的开源Linq ORM数据访问组件,支持Nullable类型和枚举类型.zip

    ELinq 是一个轻量简单易用的开源Linq ORM数据访问组件,支持Nullable类型和枚举类型,支持根据实体类自动建库建表建关系,支持根据数据库通过T4模版自动生成实体代码,对Linq的谓词提供了完美的支持,旨在让绝大部份...

    C#API官方手册下载

    C# 8.0引入了默认接口实现和 nullable 引用类型等。 十、C#与.NET Framework / .NET Core C#是.NET平台的核心编程语言,可用于构建跨平台的应用程序。.NET Framework提供了丰富的类库,而.NET Core是一个轻量级、高...

    自己整理的c#语法和特性知识(c#1.0 -c#10)

    从C#2.0开始,引入了匿名方法、迭代器、匿名类型、泛型、partial类和方法、以及Nullable类型。C#3.0引入了LINQ(Language Integrated Query),增强了数据查询能力。C#4.0引入了动态类型和异域程序集。后续版本继续...

    (GOOD,PASS)LINQ TO DATATABLE OR DATASET 完美解决方案,可排除DATASET不支持System.Nullable错误,并为GRIDVIEW增加空行

    在 C# 中,Nullable<T> 类型允许一个值类型能够表示 null。这对于数据库字段来说非常有用,因为数据库字段可能为空 (NULL)。 #### 2.2 解决方案 在提供的部分代码中,可以看到一个名为 `noNullListToDataTable<T>` ...

Global site tag (gtag.js) - Google Analytics