C#中的可空类型

文章介绍了C#中的可空类型概念,允许值类型变量标记为可能无效,可以赋值为null。空接合运算符(??)用于在变量为null时提供默认值。此外,文章还展示了如何创建和使用可空用户自定义类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、什么是可空类型

二、为可空类型赋值

三、使用空接合运算符

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


一、什么是可空类型

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

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

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

产生的可空类型如下:

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

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

二、为可空类型赋值

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

  1. 基础类型的值
  2. 同一可空类型的值
  3. null 

三、使用空接合运算符

  1.   空接合运算符允许我们在可空类型变量为null时返回一个值给表达式。(可空类型也可以使用标准运算符和比较运算符)
  2. 空接合运算符由两个连续的问号组成。
  3. 第一个操作数是可空类型的变量。
  4. 第二个操作数是基础类型的不可空值。
  5. 在运行时,如果第一个操作数运算后为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#图解教程》)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值