C#中可空类型的使用

目录
  • 一、什么是可空类型
  • 二、为可空类型赋值
  • 三、使用空接合运算符
  • 四、使用可空用户自定义类型

一、什么是可空类型

可空类型允许我们创建一个值类型变量并且可以标记为有效或无效,这样我们就可以有效地将值类型设置为null。可空类型总是基于另外一个叫做基础类型的已经被声明的类型。

可以从任何值类型创建可空类型。不能从引用类型或其他可空类型创建可空类型。不能在代码中显示声明可空类型,只能声明可空类型的变量。编译器会使用泛型隐式地创建可空类型。

举例:声明一个可空int类型的变量

产生的可空类型如下:

必须确保使用可空类型时,该可空变量不是null

可空类型和相应的非可空类型可以轻松转换:

二、为可空类型赋值

可以将以下三种类型的值赋给可空变量:

基础类型的值同一可空类型的值null

三、使用空接合运算符

  • 空接合运算符允许我们在可空类型变量为null时返回一个值给表达式。(可空类型也可以使用标准运算符和比较运算符)
  • 空接合运算符由两个连续的问号组成。
  • 第一个操作数是可空类型的变量。
  • 第二个操作数是基础类型的不可空值。
  • 在运行时,如果第一个操作数运算后为null,将返回第二个操作数作为结果。
        static void Main(string[] args)
        {
            int? myInt = null;
            Console.WriteLine("myInt:{0}", myInt ?? -1);

            myInt = 6;
            Console.WriteLine("myInt:{0}", myInt ?? -1);

        }

四、使用可空用户自定义类型

1. 创建用户自定义值类型

    struct MyStruct //声明结构
    {
        public int X;
        public int Y;

        public MyStruct(int x, int y)
        {
            X = x;
            Y = y;
        }
    }

2.将值类型转换为可空类型

        static void Main(string[] args)
        {
            MyStruct? ms = new MyStruct(6,7);//方式1,使用?

            MyStruct myStruct = new MyStruct(6,7);
            Nullable<MyStruct> ms3 =  new Nullable<MyStruct>(myStruct);//使用Nullable创建的可空类型

        }

3.使用自定义值类型转换后的可空类型,可空类型其数据只能通过Value来访问。

 struct MyStruct //声明结构
    {
        public int X;
        public int Y;

        public MyStruct(int x, int y)
        {
            X = x;
            Y = y;
        }
    }
    internal class Program
    {

        static void Main(string[] args)
        {
            MyStruct ms1 = new MyStruct(6,7);//值类型

            MyStruct? ms2 = new MyStruct(6,7);//使用?创建的可空类型

            MyStruct myStruct = new MyStruct(6,7);
            Nullable<MyStruct> ms3 =  new Nullable<MyStruct>(myStruct);//使用Nullable创建的可空类型

            Console.WriteLine("X={0},Y={1}", ms1.X, ms1.Y);

            Console.WriteLine("X={0},Y={1}", ms2.Value.X, ms2.Value.Y);

            Console.WriteLine("X={0},Y={1}", ms3.Value.X, ms3.Value.Y);

        }
    }、

到此这篇关于C#中可空类型的使用的文章就介绍到这了,更多相关C# 可空类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#可空类型用法分析

    本文实例讲述了C#可空类型用法.分享给大家供大家参考.具体分析如下: 可空类型只能用于值类型,不能用于引用类型,引用类型本身支持null值. 如果直接把null赋值给int类型,会出现一个错误"无法将 NULL 转换成'int',因为它是一种值类型". 赋值时应该使用 int? a = null; 可空类型与一元或二元运算符一起使用是,如果一个操作数或两个操作数都是null,其结果为null. 说白了int?a=null 这句话的意思就是让值类型a可以接收null这个值 举例1 int

  • 详解c# 可空类型(Nullable)

    C# 单问号 ? 与 双问号 ?? ? : 单问号用于对 int,double,bool 等无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 NullAble 类型的. int? i = 3 等同于 Nullable<int> i = new Nullable<int>(3); int i; //默认值0 int? ii; //默认值null ?? : 双问号 可用于判断一个变量在为 null 时返回一个指定的值. 接下来我们详细说明. C# 可空类

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

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

  • c#可空类型的作用说明

    可空类型用途主要是从数据库读取数据有可能为空,而不是插入使用,插入数据都要进行验证,如果要插入数据库的null,则使用DBNull.value 判断取出的数据是否为数据库中的null,如果是则赋值给可空的datetime类型的Lockdatatime 属性 tseat.Lockdatatime = reader.IsDBNull(5) ? null : (DateTime?)reader.GetDateTime(5); 判断取出的数据是否为数据库中的null,如果是则赋值给可空的int类型的Te

  • C# 可空类型的具体使用

    在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析. 1.可空类型基础知识 顾名思义,可空类型指的就是某个对象类型可以为空,同时也是System.Nullable结构的实例.可空类型可以表示基础值类型正常范围的值,然后再加上一次null值.当然,也可以被赋值null值.比如Nullable<bool>可以被赋值true.false或者null. 声明一个可空类型的标准语句如下: T? myNullableNum = rangedNum/new T?()

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

    null与void null值用来表示数据类型未被赋予任何值,它是一种引用类型:void表示没有类型,或者说是没有任何值.null与void的区别可以认为void是根本没有,而null是一个空箱子,里面什么都没有. null值只能赋值给引用类型,这里注意到string也是一种引用类型:引用类型在C中称为"指针",即存放变量位置的内存空间位置.将变量设为null,会显式地设置引用,且它本身不指向任何内存位置: null值赋给值类型将导致编译错误. void用于方法值的返回,其本质并不是一

  • C#基础知识 全面解析可空类型

    引言: C# 2.0 中还引入了可空类型,可空类型也是值类型,只是可空类型是包括null的值类型的,下面就介绍下C#2.0中对可空类型的支持具体有哪些内容(最近一直都在思考如何来分享这篇文章的,因为刚开始觉得可空类型使用过程中比较简单,觉得没有讲的必要,但是考虑到这个系列的完整性,决定还是唠叨下吧,希望对一些不熟悉的人有帮助). 一.为什么会有可空类型 如果朋友们看了我之前的分享,对于这一部分都不会陌生,因为我一般介绍C#特性经常会以这样的方式开头的, 因为每个特性都是有它出现的原因的(有一句佛

  • C#中关于可空类型的小知识

    1) 在与1元或二元运算符一起使用时,如果其中一个操作数为null或两个均null,则结果为null. 如: 复制代码 代码如下: int? a = null; int? b = a+3; 则b为null 2) 比较可空类型时,只要有一个操作数为null,结果就为false 如: 复制代码 代码如下: int? a = null; int? b = 8; (a>=b)将返回false 而正是因为null的可能性,所以不能随意比较一个可空类型和一个非可空类型. 3) 空接合运算符 空接合运算符&quo

  • C# 可空类型分析

    例如,Nullable<Int32>,读作"可空的 Int32",可以被赋值为 -2147483648 到 2147483647 之间的任意值,也可以被赋值为 null 值.Nullable<bool> 可以被赋值为 true 或 false,或 null.在处理数据库和其他包含可能未赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型的功能特别有用.例如,数据库中的布尔型字段可以存储值 true 或 false,或者,该字段也可以未定义. 可空类型具有

  • Java8中Optional类型和Kotlin中可空类型的使用对比

    本文主要给大家介绍了关于Java8中Optional类型和Kotlin中可空类型使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 在 Java 8中,我们可以使用 Optional 类型来表达可空的类型. package com.easy.kotlin; import java.util.Optional; import static java.lang.System.out; /** * Optional.ofNullable - 允许传递为 null 参数 *

  • C#中可空类型的使用

    目录 一.什么是可空类型 二.为可空类型赋值 三.使用空接合运算符 四.使用可空用户自定义类型 一.什么是可空类型 可空类型允许我们创建一个值类型变量并且可以标记为有效或无效,这样我们就可以有效地将值类型设置为null.可空类型总是基于另外一个叫做基础类型的已经被声明的类型. 可以从任何值类型创建可空类型.不能从引用类型或其他可空类型创建可空类型.不能在代码中显示声明可空类型,只能声明可空类型的变量.编译器会使用泛型隐式地创建可空类型. 举例:声明一个可空int类型的变量 产生的可空类型如下:

  • .NET中可空值类型【Nullable<T>】实现原理

    为了让.Net中的值类型可以赋值为null,微软特地添加了Nullable<T>类型,也可简写为T?.但是Nullable<T>自身是结构体,也是值类型,那么它是如何实现将null赋值给值类型的呢? 下面通过自定义一个可空值类型来讲解Nullable<T>的实现原理. 自定义可空值类型 struct XfhNullable<T> where T : struct { private T innerValue; //这个属性很重要 public bool Ha

  • 浅谈python中的数字类型与处理工具

    python中的数字类型工具 python中为更高级的工作提供很多高级数字编程支持和对象,其中数字类型的完整工具包括: 1.整数与浮点型, 2.复数, 3.固定精度十进制数, 4.有理分数, 5.集合, 6.布尔类型 7.无穷的整数精度 8.各种数字内置函数及模块. 基本数字类型 python中提供了两种基本类型:整数(正整数金额负整数)和浮点数(注:带有小数部分的数字),其中python中我们可以使用多种进制的整数.并且整数可以用有无穷精度. 整数的表现形式以十进制数字字符串写法出现,浮点数带

随机推荐