C#可空类型 T?
可空类型概述
可空类型具有以下特性:
可空类型表示可被赋值为 null 值的值类型变量。无法创建基于引用类型的可空类型。(引用类型已支持 null 值。)。
语法 T? 是 System.Nullable<T> 的简写,此处的 T 为值类型。这两种形式可以互换。
为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108;。
如果基础类型的值为 null,请使用 System.Nullable.GetValueOrDefault 属性返回该基础类型所赋的值或默认值,例如 int j = x.GetValueOrDefault();
请使用 HasValue 和 Value 只读属性测试是否为空和检索值,例如 if(x.HasValue) j = x.Value;
如果此变量包含值,则 HasValue 属性返回 True;或者,如果此变量的值为空,则返回 False。
如果已赋值,则 Value 属性返回该值,否则将引发 System.InvalidOperationException。
可空类型变量的默认值将 HasValue 设置为 false。未定义 Value。
使用 ?? 运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,如 int? x = null; int y = x ?? -1;。
不允许使用嵌套的可空类型。将不编译下面一行:Nullable<Nullable<int>> n;
class NullableExample
{
static void Main()
{
int? num = null;
if (num.HasValue == true)
{
System.Console.WriteLine("num = " + num.Value);
}
else
{
System.Console.WriteLine("num = Null");
} //y is set to zero
int y = num.GetValueOrDefault(); // num.Value throws an InvalidOperationException if num.HasValue is false
try
{
y = num.Value;
}
catch (System.InvalidOperationException e)
{
System.Console.WriteLine(e.Message);
}
}
}
以上将显示输出:
num = Null
Nullable object must have a value.
C#可空类型 T?的更多相关文章
- 四、可空类型Nullable<T>到底是什么鬼
值类型为什么不可以为空 首先我们都知道引用类型默认值都是null,而值类型的默认值都有非null. 为什么引用类型可以为空?因为引用类型变量都是保存一个对象的地址引用(就像一个url对应一个页面),而 ...
- C#可空类型
C#创建可空类型对于有些可选类型的时候特别好用.创建可空类型用法直接上图. 执行效果 用法 运行效果
- 【C#】可空类型(Nullable)
C# 可空类型(Nullable) C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值. 例如,Nullable& ...
- C#可空类型的速度和GC Alloc测试
在Unity中进行速度和GC Alloc的测试 测试脚本: using UnityEngine; using System; using System.Collections; using Syste ...
- swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念
***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil ...
- Guava-Optional可空类型
接上篇Guava之Joiner和Splitter,本篇将介绍Guava的另外一个有用的对象Optional,这在Java中Google Guava首先给我们提出可空对象模型的.在其他语言如c#这是已经 ...
- [C#] 可空类型的实现原理
int? 是可为null的值类型.只比int多一个值就是null. 思考: 同样的内存空间,怎么实现的多一个值的?都是4字节,32位,int?靠什么存在一个null值的. 发现: 分析一下内存,看看如 ...
- 07.C#泛型的限制和可空类型的简单说明(三章3.5-四章4.1)
自己在写文章的同时,也是在学习,对于书中的语句很多其实没有太好的理解,读一本书,要消化!!!三章都是讲泛型的,最后写一下泛型的限制,对于本章学习的完结,one end,one begin. 看下面的代 ...
- C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)
前言 之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处. 本文的重点就是:值类型直接存储其值,引 ...
- 将List<T>转化成 DataTable--调整可空类型的转化错误
加载表结构并保持成XML string cmdText = @"select * from kb_lable_temp where 1=2"; using (SqlConnecti ...
随机推荐
- 动态生成HTML元素-模拟在线考试功能
前言 我们在项目开发过程中,经常会遇到页面html元素无法提前预设,而是通过某一些条件动态生成的情况,这里我们需要考虑如下几个因素: 1.需要动态创建的元素类型,比如TextBox, Radio, C ...
- IDEA插件配置推荐
一.配置 [自动编译]如下图配置:推荐指数[***] [忽略大小写]说明:IDEA默认是匹配大小写,此开关如果未关,你输入字符一定要符合大小写.比如敲string是不会出现代码提示或只能补充.但是如果 ...
- python7.4邮件发送
- 阿里ECS云服务器部署文件
今天,接触了阿里ECS云服务器,免费领取链接https://dwz.cn/WOFZpZz1 获取之后,要添加一下端口,刚开始需要80 8080 3306的端口,其他的根据需要自行添加 点击快速创建 ...
- 聊聊WindowServer那些事!
前言说明 使用工具:VS2019 思考为什么要使用WindowServer,它能做什么了?(后面解答) 一:什么是WindowServer?(我们做的是一个什么东西?) Microso ...
- 2020-04-14:mysql原子性和持久性怎么保证
1.Mysql怎么保证一致性的? OK,这个问题分为两个层面来说. 从数据库层面,数据库通过原子性.隔离性.持久性来保证一致性.也就是说ACID四大特性之中,C(一致性)是目的,A(原子性).I(隔离 ...
- java.util.Scanner中hasNext()方法和next()方法的区别
先说结论: 两者均根据空格划分数据 两者在没有数据输入时均会等待输入 next()方法会将空格划分的数据依次输出,运行一次,输出一个 hasNext()方法会跟着next()方法移动,当前数据不为空, ...
- java如何实现发送邮箱
package cn.buy.util; import java.security.GeneralSecurityException; import java.util.Properties; imp ...
- 使用halo搭建自己的博客并配置https域名访问
首先进行java配置 # 1. 下载jdk [下载地址](https://www.oracle.com/cn/java/technologies/javase-downloads.html) - 一定 ...
- 碰到 Json_CSRF 怎么办?
前言 在最近挖洞的时候,老是碰到 POST 传参采用 JSON 格式,而不是传统的parameter=value的格式,之前也没接触过,所以也不知道该怎么搞,所以打算学习一下,此文作为一个笔记梳理. ...