`
冷寒冰
  • 浏览: 243132 次
  • 性别: 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)
{

}}

相关推荐

    自构造特殊数据类型 可用在特殊ORMaping中使用

    private System.Nullable&lt;int&gt; m_SendPerson = null; /// &lt;summary&gt; /// 派单人 /// &lt;summary&gt; public System.Nullable&lt;int&gt; SendPerson { get{ return m_SendPerson; } set{ m_SendPerson = value; } } ...

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

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

    spring_MVC源码

    55.&lt;/beans&gt; hibernate.properties数据库连接配置 [java] view plaincopy 01.dataSource.password=123 02.dataSource.username=root 03.dataSource.databaseName=test 04.dataSource....

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

    Nullable&lt;Int32&gt;,读作“可空的 Int32”,可以被赋值为 -2147483648 到 2147483647 之间的任意值,也可以被赋值为 null 值。Nullable&lt;bool&gt; 可以被赋值为 true 或 false,或 null。在处理数据库和其他包含可能未赋值...

    C# 运算符 ?、??、?: 各种问号的用法和说明

    其实是System.Nullable&lt;T&gt;(泛型结构)的缩写形式,也就意味着当你用到T?时编译器在编译时会把T?编译成System.Nullable&lt;T&gt;的形式,例如:int?,编译后便是System.Nullable&lt;int&gt;的形式。 代码如下: int a

    C#中的问号(?号)用法小结

    1. 可空类型修饰符(?):  引用类型可以使用空引用...其实是System.Nullable&lt;T&gt;(泛型结构)的缩写形式,也就意味着当你用到T?时编译器在编译时会把T?编译成System.Nullable&lt;T&gt;的形式,  例如:int?,编译后便是System

    .NET基础之自定义泛型分析

    还有一种我们经常使用的简单的泛型:System.Nullable&lt;T&gt;,即可空类型。我们可以:   System.Nullable&lt;int&gt; nullableInt; 声明一个可空的int类型,由于C#语法对这个做了简化通常我们都不这样写,而是这样写:   int? ...

    .NET中可空值类型【NullableT】实现原理

    为了让.Net中的值类型可以赋值为null,微软特地添加了Nullable&lt;T&gt;类型,也可简写为T?。但是Nullable&lt;T&gt;自身是结构体,也是值类型,那么它是如何实现将null赋值给值类型的呢? 下面通过自定义一个可空值类型来讲解...

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

    null与void null值用来表示数据类型未被赋予任何值,它是一种引用类型;void表示没有类型,或者说是没有任何值。null与void的区别可以认为void是根本没有,而null是一...System.Nullable C#中null值不能赋值给值类型,

    javax Nullable 标签的jar

    使用javax Nullable注解必须使用的jar包

    UIView+AZGradient.zip

    + (UIView *_Nullable)az_gradientViewWithColors:(NSArray&lt;UIColor *&gt; *_Nullable)colors locations:(NSArray&lt;NSNumber *&gt; *_Nullable)locations startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint;...

    Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition

    &lt;br&gt;Discover all the new .NET 3.5 features—nullable types, delegate covariance, ASP.NET 2.0 master pages, the new Windows Forms &lquo;Strip” controls, and much more. &lt;br&gt;Get a professional foothold...

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

    以下是System.Nullable&lt;T&gt;在FCL中的定义。 [Serializable, StructLayout(LayoutKind.Sequential)] public struct Nullable&lt;T&gt; where T :struct { private Boolean hasValue= false; internal T value= default(T)...

    详解c# 可空类型(Nullable)

    Nullable&lt;int&gt; i = new Nullable&lt;int&gt;(3); int i; //默认值0 int? ii; //默认值null ?? : 双问号 可用于判断一个变量在为 null 时返回一个指定的值。 接下来我们详细说明。 C# 可空类型(Nullable) C# 提供了一个...

    c#是什么呢?初学者看看吧

    不知道C#是什么的,看看吧! 1、 泛型:在我看来,泛型就是通过...本质上是一种泛型的应用,是System .Nullable&lt;&gt;的一种类型实例化。  6、 静态类:静态类是只用于包含静态成员的类型,它既不能实例化,亦不能被继承。

    C# 可空类型分析

    例如,Nullable&lt;Int32&gt;,读作“可空的 Int32”,可以被赋值为 -2147483648 ... 可空类型具有以下特性: ·可空类型表示可被赋值为 null 值的值类型变量。无法创建基于引用类型的可空类型。(引用类型已支持 null 值。)。

    C# 语言规格说明(English Edition第五版)

    4.1.1 The System.ValueType type 78 4.1.2 Default constructors 78 4.1.3 Struct types 79 4.1.4 Simple types 79 4.1.5 Integral types 80 4.1.6 Floating point types 81 4.1.7 The decimal type 82 4.1.8 The ...

    C# 可空类型的具体使用

    比如Nullable&lt;bool&gt;可以被赋值true、false或者null。 声明一个可空类型的标准语句如下: T? myNullableNum = rangedNum/new T?() or null; 比如,我们声明一个可空值类型并赋值null; int? intClass =

Global site tag (gtag.js) - Google Analytics