C#中可空类型的使用

 更新时间:2023年04月07日 15:32:08   作者:康凯哇咔咔  
本文主要介绍了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# 可空类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#自定义字符串替换Replace方法实例

    C#自定义字符串替换Replace方法实例

    这篇文章主要介绍了C#自定义字符串替换Replace方法,以两个不同实例对比分析了C#自定义字符串替换Replace的方法,是C#关于字符串操作的典型应用,需要的朋友可以参考下
    2014-11-11
  • Unity控制指针旋转到指定位置

    Unity控制指针旋转到指定位置

    这篇文章主要为大家详细介绍了Unity控制指针旋转到指定位置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C#编写游戏客户端的实现代码

    C#编写游戏客户端的实现代码

    这篇文章主要介绍了C#编写游戏客户端的实现代码,连接客户端原理流程图,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • C# 泛型List排序的实现

    C# 泛型List排序的实现

    本文主要介绍了C# 泛型List排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • c#实现断点续传功能示例分享

    c#实现断点续传功能示例分享

    这篇文章主要介绍了c#实现的断点续传功能示例,断点续传就是在上一次下载时断开的位置开始继续下载。在HTTP协议中,可以在请求报文头中加入Range段,来表示客户机希望从何处继续下载,下面是示例,需要的朋友可以参考下
    2014-03-03
  • C# log4net日志库的用法小结

    C# log4net日志库的用法小结

    log4net日志开源库是用来控制日志文件大小,日志文件个数,滚动式覆盖,自由控制日志打印等级,今天通过本文给大家介绍C# log4net日志库的用法小结,感兴趣的朋友一起看看吧
    2021-10-10
  • C# 判断字符串第一位是否为数字

    C# 判断字符串第一位是否为数字

    C# 判断字符串第一位是否为数字,需要的朋友可以参考一下
    2013-04-04
  • C# 调用腾讯即时通信 IM的示例

    C# 调用腾讯即时通信 IM的示例

    这篇文章主要介绍了C# 调用腾讯即时通信 IM的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-11-11
  • Unity实现简单换装系统

    Unity实现简单换装系统

    这篇文章主要为大家详细介绍了Unity实现简单换装系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • C# 获取系统字体的示例代码

    C# 获取系统字体的示例代码

    这篇文章主要介绍了C# 获取系统字体的方法,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论