C# 可空类型(Nullable)

C# 可空类型(Nullable)

C# 单文号? 与 双问号??

?:单问号用于对int,double,bool等无法直接赋值为null的数据类型进行null的赋值,意思是这个数据类型是Nullable类型的。

int? i=3;
等同于
Nullable<int> i = new Nullable<int>(3);

int i; //默认值0
int?i; //默认值null

?? :双问号 可用于判断一个变量在位null时返回一个指定的值。

接下来详细说明。


 

C# 可空类型(Nullable)

C# 提供了一个特殊的数据类型,nullable类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个null值。

例如,Nullable<int32>,读作“可空的int32”,可以被赋值为-2,147,483,648到2,147,483,647之间的任意值,也可以被赋值为null值。

类似于,Nullable<bool>变量可以被赋值为true或false或者null。

声明一个nullable类型(可控类型)的语法如下:

<data_type>?<variable_name> = null;

下面实例演示了可空数据类型的用法:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace nullable
{
    class Program
    {
        static void Main(string[] args)
        {
            int? num1 = null;
            int? num2 = 45;
            double? num3 = new double?();
            double? num4 = 2.1415926;
            bool? boolval = new bool?();

            Console.WriteLine($"显示可空类型{num1},{num2},{num3},{num4}");
            Console.WriteLine($"一个可空的布尔值:{boolval}");
            Console.ReadLine();
        }
    }
}
复制代码

当上面的代码被编译和执行时,它会产生下列结果:

 

 

 

Null 合并运算符(??)

Null合并运算符用于定义可空类型和引用类型默认值。Null合并运算符为类型转换定义了一个预设值,以防可空类型的值为Null。

Null合并运算符把操作数类型隐式转换为另一个可空(或不可空)的值类型的操作数的类型。

如果一个操作数的值问null,则运算符翻译第二个操作数的值,否则返回第一个操作数的值。下面的实例显示了这一点:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace nullable
{
    class Program
    {
        static void Main(string[] args)
        {
            double? num1 = null;
            double? num2 = 3.1415926;
            double num3;
            num3 = num1 ?? 5.55;
            Console.WriteLine($"num3的值:{num3}");
            num3 = num2 ?? 5.34;
            Console.WriteLine($"num3的值:{num3}");
            Console.ReadLine();
        }
    }
}
复制代码

当上面的代码被编译和执行时,他会产生下列结果:

 

posted @   刘靖凯  阅读(2641)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示