C# 可空

WBOY
发布: 2024-09-03 15:16:25
原创
978 人浏览过

在 C# 中不能为变量分配 null 值,因此为了克服这个问题,C# 提供了一个特殊功能,它将 null 值分配给称为可空类型的变量,并且它不适用于引用类型,因为 null value 已经存在,它仅适用于可为 null 的类型,该类型是 System.Nullablestruct 的实例,其中 T 表示不可为 null 的值类型,例如布尔类型、整数类型、浮点类型等。

语法:

Nullable<data_type> variable_name = null;
登录后复制

以上语法表示 C# 中可为 null 的数据类型。关键字 nullable 表示可空类型,它是 System.Nullablestruct 的实例,其中 T 表示不可为空值类型,例如布尔类型、整数类型、浮点类型等。数据类型表示变量的数据类型,其中variable_name代表变量的名称,并为其分配一个空值。

这个语法还有一个捷径,其中涉及?运算符以及数据类型如下所述:

data_type? variable_name = null;
登录后复制

以上语法表示 C# 中可为 null 的数据类型。这 ?标记符号表示可为空类型。 Data type 表示变量的数据类型,其中variable_name 表示变量的名称,并为其赋予空值。

C# 中可空类型的特性

  • 可空类型的值无法直接访问。 GetValueOrDefault() 方法用于提取指定的值,如果不赋值为null,则返回默认值,即零。
  • 可以使用可空类型将空值分配给变量,而无需基于引用类型创建可空类型。
  • 值可以分配给可空类型。
  • Nullable HasValue 和 Nullable 可用于检查值。如果为对象赋值,则返回 true;如果为对象赋值 null,则返回 false。如果没有为对象分配值,则会引发编译时错误。
  • ==并且!运算符可以与可空类型一起使用。
  • 如果将 null 分配给可空类型,则 GetValueOrDefault(T) 方法会给出分配的值或作为默认值给出的默认值。
  • 空合并运算符 (??) 也可用于为可空类型的值赋值。
  • Nullable 类型不支持嵌套 Nullable 类型。
  • 可空类型不支持 var 类型。如果 nullable 与 var 一起使用,编译器会给出编译时错误。

C# 中可空类型的优点

  • 可空类型用于数据库应用程序。如果数据库中的列需要空值,则可以使用可空类型为该列分配空值。
  • 未定义的值可以使用可空类型来表示。
  • 可以使用可空类型而不是引用类型来存储空值。

可空辅助类

null 的值小于任何值;因此比较运算符不能与 null 一起使用,因此我们使用可为 null 的静态类。它被视为可空类型的辅助类。可空静态类提供 GetUnderlyingType 方法。此方法返回可空类型的类型参数。

C# 中可空类型的工作

原始数据类型是值类型,例如数字。值类型存储在堆栈中,并由 .NET 框架隐式初始化为其默认值,即使它们在定义时未显式初始化也是如此。例如,整数值默认初始化为零;布尔值默认初始化为 false 等等。同样,所有值类型都表示默认值。它们都不能表示在数据库应用程序中非常重要的空值,并且表示空值在此类应用程序中很重要。选择表示空值的任何值可能不属于该值的数据类型允许的值范围。例如,如果我们选择 -1 来表示某个值类型的 null,则 -1 可能不是该数据类型允许的值。还应确保如果选择某个值来表示应用程序中的空值,则该值不得在应用程序中的其他位置用于任何其他目的。为了解决这个问题,C# 2.0 提供了可空类型。系统的结构。 Nullable 如下,可用于定义可空类型:

代码:

namespace System
{
public struct Nullable : System.IComparable, System.INullableValue
{
public Nullable(T value);
public static explicit operator T(T? value);
public static implicit operator T?(T value);
public T Value { get; }
public bool HasValue { get; }
public T GetValueOrDefault();
}
}
登录后复制

这里T代表值类型,结构体接受一个参数。任何值都可以使用语法定义为可空类型。

语法:

System.Nullable<data_type> variable_name = null;
登录后复制

C# 可空的示例

以下是 C# Nullable 的示例。

示例#1

C# 程序来说明当没有为变量赋值时可空类型

Code:

using System;
public class Geeks {
//Defining Main Method
public static void Main(string[] args)
{
// Nullable type is defined
Nullable<int> a = null;
// We use the method GetValueOrDefault(), the default value is 0
Console.WriteLine(a.GetValueOrDefault());
// Nullable type is defined
int? b = null;
//We use the method GetValueOrDefault(), the default value is 0
Console.WriteLine(b.GetValueOrDefault());
// non-nullable is defined using nullable type syntax
int? a1 = 200;
// We use the method GetValueOrDefault(), the default value is 0 but the value that is assigned to the variable is returned
Console.WriteLine(a1.GetValueOrDefault());
// non-nullable is defined using nullable type syntax
Nullable<int> b1 = 10;
//  We use the method GetValueOrDefault(), the default value is 0 but the value that is assigned to the variable is returned
Console.WriteLine(b1.GetValueOrDefault());
}
}
登录后复制

The output of the above code is shown in the snapshot below:

Output:

C# 可空

Example #2

C# program using nullable type to illustrate the use of nullable.HasValue method.

Code:

using System;
public class GFG {
//Defining Main Method
public static void Main()
{
// defining the variable m as a nullable type
Nullable<int> m = 100;
// the value of the variable m is checked
Console.WriteLine(m.HasValue);
// defining the variable n as a nullable type and assigned a value to it
Nullable<int> n = null;
// check the value of object
Console.WriteLine(n.HasValue);
}
}
登录后复制

The output of the above code is shown in the snapshot below:

Output:

C# 可空

Conclusion

In this tutorial, we understand the concept of nullable type in C# through definition and then understand the working of nullable type in C#. Then we understand different C# programs using nullable type and their working with their output snapshots included with the programs’ results.

以上是C# 可空的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板