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

详解System.Nullable<值类型>

阅读更多

.net framework 2.0包含了一个泛型类型定义,它满足了两种情况的要求:可以将一个值类型的实例赋值为null,并且可以判断该实例的值是否为null,该泛型类型就是System.Nullable<T>,其中T被限制为值类型。从System.Nullable<T>构造而来的类型称为可控值类型(nullable value type).

System.Nullable<T>有一个属性value,当一个可空值类型的实例的值不为null时,可以通过这个属性获得该类型实例的值。所以我们可以写出类似下面这样的代码:

System.Nullable<int> myNullableInteger=null

myNullableInteger=1;

if(myNullableInteger!=null)

{

  Console.WriteLine(myNullableInteger.Value);

}

C#语言提供了一种简化语法来声明从System.Nullable<T>构造的类型。该

语法允许将:

System.Nullable<int> myNullableInteger;

简写成:

int? myNullableInteger;

 

编译器不允许将一个可空值类型的值直接赋值给普通的值类型,例如下面的代码是不能通过编译的:

int? myNullabelInteger=null;

int myInteger=myNullabelInteger;

因为可空值类型的值可以是null,而null不可以赋给普通值类型。

 

虽然编译器允许下面这样的代码:

int? myNullableInteger=null;

int myInteger=myNullableInteger.Value;

但是第二行代码的运行将会抛出异常,因为当从System.NUllable<T> 构造的类型没有赋予一个有效的T类型的值时,任何对其System.Nullable<T>.Value属性的访问都是无效操作,上面这个例子就是事先没有赋值。

 

 

将一个可空值类型的值赋给普通类型的方法是:先用System.Nullable<T>.Hasvalue属性判断这个可空值类型是否被赋过一个类型为T的有效值:

int? myNullableInteger=null;

if(myNullableInteger.HasValue)

{

  int myInteger=myNullableInteger.Value;

}

 

 

另外一种方法是使用下面的语法:

int? myNullableInteger=null;

int myInteger=myNullableInteger??-1;

如果后者(myNullableInteger)被赋予有效的整型值,那么普通整型myInteger将被赋予可空整型值myNullableInteger的值,否则myInteger将被赋值为-1;

0
0
分享到:
评论
2 楼 sunqing0316 2014-11-25  
public static DateTime? GetDataTimeNullable(DataRow row,string columnName){
if(row[columnName]==DBNull.Value)
{
return null;
}
  else{
    return Convert.ToDateTime(row[columnName]);
}
}

请问楼主上述代码是说可以赋一个null值给GetDataTimNullable吗?菜鸟,不是很懂
1 楼 sunqing0316 2014-11-25  
请问public static DateTime? GetDataTimeNullable(DataRow row,string columnName){
if(row[columnName]==DBNull.Value)
{

}}

相关推荐

    C#基础语法:可空类型详解

    在C#编程语言中,可空类型(Nullable Types)是一个重要的特性,允许开发者为原本不可为空的值类型(如int, double, bool等)赋予null值。这在处理可能缺失数据或不确定是否有值的场景中非常有用。在C#中,可空类型...

    JPA连接MySQL的例子

    **JPA连接MySQL实例详解** Java Persistence API (JPA) 是Java平台上的一个标准,用于管理关系数据库的对象-关系映射(ORM)。它提供了一种框架,使得开发者可以使用面向对象的方式处理数据库操作,而无需过多关注...

    c#:CTS类型系统

    这实际上是System.Nullable&lt;T&gt;的实例,允许值类型变量接受null值,特别适用于数据库编程中可能为空的字段。 **三、委托类型和接口类型** 1. **委托类型**:委托是引用类型,它代表一个方法的签名,可以用来封装和...

    LINQ_to_SQL语法及实例大全

    #### 二、LINQ to SQL基本语法详解 ##### 1. Where操作 - **简单形式**:通过`Where`关键字可以过滤出满足特定条件的数据。 ```csharp var filteredData = from data in context.TableName where data.Condition...

    DSP2055_1.0.0_Quick Start for Authoring Redfish Schema.pdf

    &lt;EntityType Name="System"&gt; &lt;Key&gt; &lt;PropertyRef Name="Id" /&gt; &lt;/Key&gt; &lt;Property Name="Id" Type="Edm.String" Nullable="false" /&gt; &lt;Property Name="Name" Type="Edm.String" Nullable="true" /&gt; ... &lt;/...

    java获取数据库主外键

    ArrayList&lt;String&gt; tables = new ArrayList&lt;&gt;(); while (tableRs.next()) { String tableName = tableRs.getString("TABLE_NAME"); tables.add(tableName); System.out.println(tableName); } ``` 4. **获取...

    C#学习笔记......

    4. **集合与泛型**:C#提供了多种集合类,如ArrayList、LinkedList、HashSet等,以及泛型集合List&lt;T&gt;、Dictionary&lt;TKey, TValue&gt;等。泛型可以确保集合中的元素类型统一,提高效率和安全性。 5. **LINQ(Language ...

    ejb3.0 注解 其中一部分

    ### EJB 3.0 注解详解 #### 1. `@Id` —— 主键标识 在EJB 3.0中,`@Id`注解用于标识实体类中的某个属性作为主键。该注解可以应用于字段或getter方法上。 **示例:** ```java @Entity public class User { @Id ...

    Oracle dual详解

    ### Oracle Dual 表详解 #### 一、Oracle Dual 表简介 在Oracle数据库中,`DUAL`表是一个特殊的表,通常被用于执行简单的查询或计算。它只有一个行和一个列,该列名为`DUMMY`,其数据类型为`VARCHAR2(1)`,并且值...

    资源专区-课程设计-编程作业-C#资源

    C#引入了泛型,允许开发者创建可重用的类型安全的数据结构,如List&lt;T&gt;和Dictionary&lt;TKey, TValue&gt;。这降低了类型转换的开销,并提高了代码的效率和安全性。 4. **异常处理** C#支持异常处理机制,通过try-catch-...

    管理系统项目源码.docx

    ### 知识点详解 #### 一、管理系统项目的构建与Flask框架的使用 在构建一个管理系统项目时,我们通常需要关注几个核心方面:数据库设计、后端服务以及前端展示。这里通过一个简化的示例来说明如何使用Python的...

    SqlServer查看表结构

    and sys.columns.system_type_id = sys.types.system_type_id and sys.tables.name = @table_name order by sys.columns.column_id; ``` 此脚本首先声明并初始化一个变量`@table_name`,用于存放待查看的表名。...

    【总结】oracle恢复误删除数据,解除锁定的等sql语句.doc

    ### Oracle 数据恢复与管理操作详解 #### 一、Oracle 数据恢复方法 在Oracle数据库中,误删数据或表是常见的问题之一。以下是一些恢复策略和技术: **1. 恢复表数据** - **时间戳查询**: 如果只需要恢复表中的...

    ADO.Net详解,Net数据库操作,Vb.Net数据库编程

    - **2.1.8 用Nullable类型支持DBNull值**:在处理数据库中的空值时,Nullable类型提供了更好的支持。 **2.2 使用ADO.NET 2.0的新持久性Windows窗体对象** - **2.2.1 ADO.NET 1.x与2.0的数据设计器比较**:新的设计...

    PHP7.2.20.rar

    - **Nullable Types**:允许在函数或方法的参数和返回类型声明中使用问号(?)来表示可能为NULL的值。 - **Void Return Type**:函数或方法声明可以指定void作为返回类型,表示该函数不返回任何值。 - **Fakeroot...

    CSharp_Advanced

    泛型类、接口、方法和委托都可以使用类型参数,这使得泛型可以用于任何数据类型,无论是值类型还是引用类型。例如,List&lt;T&gt;就是一个常见的泛型集合类,T代表一个未知的类型,在实例化时指定。 二、LINQ(Language ...

    如何在Java中优雅地判空详解

    Java优雅判空详解 在Java开发中,判空是一个非常重要的步骤,因为它可以避免NullPointerException的出现。通常情况下,我们会使用if (data != null)这种方式来判空。但是,这种方式并不是太优雅,且代码可读性不高...

Global site tag (gtag.js) - Google Analytics