.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;
分享到:
相关推荐
在C#编程语言中,可空类型(Nullable Types)是一个重要的特性,允许开发者为原本不可为空的值类型(如int, double, bool等)赋予null值。这在处理可能缺失数据或不确定是否有值的场景中非常有用。在C#中,可空类型...
**JPA连接MySQL实例详解** Java Persistence API (JPA) 是Java平台上的一个标准,用于管理关系数据库的对象-关系映射(ORM)。它提供了一种框架,使得开发者可以使用面向对象的方式处理数据库操作,而无需过多关注...
这实际上是System.Nullable<T>的实例,允许值类型变量接受null值,特别适用于数据库编程中可能为空的字段。 **三、委托类型和接口类型** 1. **委托类型**:委托是引用类型,它代表一个方法的签名,可以用来封装和...
#### 二、LINQ to SQL基本语法详解 ##### 1. Where操作 - **简单形式**:通过`Where`关键字可以过滤出满足特定条件的数据。 ```csharp var filteredData = from data in context.TableName where data.Condition...
<EntityType Name="System"> <Key> <PropertyRef Name="Id" /> </Key> <Property Name="Id" Type="Edm.String" Nullable="false" /> <Property Name="Name" Type="Edm.String" Nullable="true" /> ... </...
ArrayList<String> tables = new ArrayList<>(); while (tableRs.next()) { String tableName = tableRs.getString("TABLE_NAME"); tables.add(tableName); System.out.println(tableName); } ``` 4. **获取...
4. **集合与泛型**:C#提供了多种集合类,如ArrayList、LinkedList、HashSet等,以及泛型集合List<T>、Dictionary<TKey, TValue>等。泛型可以确保集合中的元素类型统一,提高效率和安全性。 5. **LINQ(Language ...
### EJB 3.0 注解详解 #### 1. `@Id` —— 主键标识 在EJB 3.0中,`@Id`注解用于标识实体类中的某个属性作为主键。该注解可以应用于字段或getter方法上。 **示例:** ```java @Entity public class User { @Id ...
### Oracle Dual 表详解 #### 一、Oracle Dual 表简介 在Oracle数据库中,`DUAL`表是一个特殊的表,通常被用于执行简单的查询或计算。它只有一个行和一个列,该列名为`DUMMY`,其数据类型为`VARCHAR2(1)`,并且值...
C#引入了泛型,允许开发者创建可重用的类型安全的数据结构,如List<T>和Dictionary<TKey, TValue>。这降低了类型转换的开销,并提高了代码的效率和安全性。 4. **异常处理** C#支持异常处理机制,通过try-catch-...
### 知识点详解 #### 一、管理系统项目的构建与Flask框架的使用 在构建一个管理系统项目时,我们通常需要关注几个核心方面:数据库设计、后端服务以及前端展示。这里通过一个简化的示例来说明如何使用Python的...
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 数据恢复与管理操作详解 #### 一、Oracle 数据恢复方法 在Oracle数据库中,误删数据或表是常见的问题之一。以下是一些恢复策略和技术: **1. 恢复表数据** - **时间戳查询**: 如果只需要恢复表中的...
- **2.1.8 用Nullable类型支持DBNull值**:在处理数据库中的空值时,Nullable类型提供了更好的支持。 **2.2 使用ADO.NET 2.0的新持久性Windows窗体对象** - **2.2.1 ADO.NET 1.x与2.0的数据设计器比较**:新的设计...
- **Nullable Types**:允许在函数或方法的参数和返回类型声明中使用问号(?)来表示可能为NULL的值。 - **Void Return Type**:函数或方法声明可以指定void作为返回类型,表示该函数不返回任何值。 - **Fakeroot...
泛型类、接口、方法和委托都可以使用类型参数,这使得泛型可以用于任何数据类型,无论是值类型还是引用类型。例如,List<T>就是一个常见的泛型集合类,T代表一个未知的类型,在实例化时指定。 二、LINQ(Language ...
Java优雅判空详解 在Java开发中,判空是一个非常重要的步骤,因为它可以避免NullPointerException的出现。通常情况下,我们会使用if (data != null)这种方式来判空。但是,这种方式并不是太优雅,且代码可读性不高...