int?和int的区别

C#中可空类型及判断赋值介绍
博客介绍了C#中数据类型相关知识。int为整型变量,不能赋值为null;int?是可空整数类型,值可为null;int??用于判断并赋值,变量为null时才能赋新值。还举例bool?类型,值有null、false、true三种,bool??与int??类似,其它类型后加问号含义相同。

int

表示整型变量,是一种数据类型,用于定义一个整型变量,不能赋值为null。

int?

表示可以为空的整数类型,它的值可以为null,给变量赋值得时候,给变量(int类型)赋值为null,而不是0。
 

int??

用于判断并赋值,先判断当前变量是否为null,如果是就可以赋个新值,否则跳过,就是说只能为null时才能赋值

public int? a=null;//定义一个整型变量a,他的值为null

public int num()
{
    return this.a ?? 0;  //判断a是否为null,是赋值,若不是null,则不执行。
}

 

对于一个类型,如果既可以给它分配一个值,也可以给它分配空引用null(表示没有任何值),我们就说这个类型是可空的。

因此,可空类型可表示一个值,或表示不存在任何值。

还有其他相似的情况。

 

比如bool?类型

值的情况只有三种,null,false,true,这三种,而bool??的意思和int??类似。

public bool? IsOk=null;//定义一个布尔变量IsOk,他的值为null

public int num()
{
    return this.IsOk?? false;  //判断IsOk是否为null,是赋值,若不是null,则不执行。
}

补充:其它的类型后加问号表示的相同的意思。

在 C# 中,`int?` 是 `Nullable<int>` 的简写形式,它表示一个可空的整数类型。这是一种特殊的值类型,与普通的 `int` 类型不同,`int?` 类型的变量除了可以存储整数值外,还可以存储 `null` 值,这在给 `int` 类型变量赋初值时非常有用,能将其赋值为 `null` 而非 `0` [^1][^2]。 ### 声明赋值 可以将 `int?` 类型的变量初始化为 `null`,或者赋予一个具体的整数值。 ```csharp int? nullableInt1 = null; // 初始化为 null int? nullableInt2 = 42; // 赋值为具体的整数 ``` ### 检查是否为 `null` 使用 `HasValue` 属性可以检查 `int?` 类型的变量是否包含一个值。如果 `HasValue` 为 `true`,则可以使用 `Value` 属性获取该值;若直接在 `HasValue` 为 `false` 时访问 `Value`,会抛出 `InvalidOperationException` 异常。 ```csharp int? nullableInt = 10; if (nullableInt.HasValue) { int value = nullableInt.Value; Console.WriteLine($"Value: {value}"); } else { Console.WriteLine("nullableInt is null."); } ``` ### 空合并运算符 `??` 空合并运算符 `??` 用于在 `int?` 类型的变量为 `null` 时提供一个默认值。 ```csharp int? nullableInt = null; int result = nullableInt ?? 0; // 如果 nullableInt 为 null,则使用默认值 0 Console.WriteLine($"Result: {result}"); ``` ### 类型转换 `int?` `int` 类型不同,运算时通常需要进行显式转换。不过,如果 `int?` 类型的值为 `null`,进行显式转换会生成 `System.InvalidOperationException` 类型的异常。 ```csharp int? op1 = 5; int result = (int)op1 * 2; ``` ### 传参 `int?` 还可以用于方法的参数,允许在调用方法时不传递参数,此时参数默认值为 `null`。 ```csharp void Get(int? num = null) { if (num.HasValue) { Console.WriteLine("num = " + num.Value); } else { Console.WriteLine("num = Null"); } } ```
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值