当前位置: 首页 > news >正文

C# 中 default 使用详解

总目录


前言

在C#中,default 关键字用于表示类型默认值。它可以根据上下文推断出适用的类型,并返回该类型的默认值。随着C#版本的发展,default 的用法也变得更加丰富和灵活。本文将详细介绍 default 在不同场景下的使用方法及其最佳实践。


一、default 获取类型的默认值

1. 语法与作用

可以使用 default 关键字来获取任意类型的默认值。

值类型(如 int, double, struct 等):返回 类型的零值或空值。

  • int 默认为 0
  • bool 默认为 false
  • 结构体的所有字段都被初始化为其默认值

引用类型(如 string, class, interface 等):默认为 null

这在初始化变量或者为方法参数提供默认值时非常有用。

2. 示例代码

    internal class Program{public static void Main(){// 获取 int 类型的默认值int intDefault = default(int);Console.WriteLine($"int 默认值: {intDefault}");        //int 默认值: 0// 获取 bool 类型的默认值bool boolDefault = default(bool);Console.WriteLine($"bool 默认值: {boolDefault}");      //bool 默认值: False// 获取自定义类的默认值MyClass classDefault = default(MyClass);Console.WriteLine($"MyClass 默认值: {classDefault}");  // MyClass 默认值:// C# 7.1 及以后版本可省略类型int intValue = default; // intValue = 0bool boolValue = default; // boolValue = falsestring stringValue = default; // stringValue = nullConsole.WriteLine($"string 默认值: {stringValue}");    //string 默认值:}}class MyClass { }

代码解释

  • default(int) 返回 int 类型的默认值 0。
  • default(bool) 返回 bool 类型的默认值 false。
  • default(MyClass) 返回自定义类 MyClass 的默认值 null。
  • 在 C# 7.1 及以后版本中,可以省略类型直接使用 default 来初始化变量,如 string stringValue = default;

二、default 在泛型中的应用

1. 语法与作用

在泛型方法或类中,当需要给泛型类型的变量赋默认值时,default 关键字非常有用。因为在泛型代码中,无法提前知道具体的类型,使用 default 可以确保无论泛型类型是值类型还是引用类型,都能正确地赋予默认值。

2. 示例代码

using System;class GenericExample<T>
{public T GetDefaultValue(){return default(T);}
}class Program
{static void Main(){GenericExample<int> intExample = new GenericExample<int>();int intResult = intExample.GetDefaultValue();Console.WriteLine($"int 泛型默认值: {intResult}"); // 返回 0GenericExample<string> stringExample = new GenericExample<string>();string stringResult = stringExample.GetDefaultValue();Console.WriteLine($"string 泛型默认值: {stringResult}"); // 返回 null}
}

从 C# 7.1 开始,可以直接使用 default 而不带括号来简化语法:

class GenericExample<T>
{public T GetDefaultValue(){return default;}
}

三、default 在 switch 语句中的使用

1. 语法与作用

在 switch 语句中,default 标签用于处理所有未被其他 case 标签匹配的情况。它类似于 if-else 语句中的 else 分支,确保 switch 语句能够处理所有可能的输入。

2. 示例代码

using System;class Program
{static void Main(){int number = 3;switch (number){case 1:Console.WriteLine("数字是 1");break;case 2:Console.WriteLine("数字是 2");break;default:Console.WriteLine("数字不是 1 也不是 2");break;}}
}

四、default 其他应用

1. 可空类型

对于可空类型(例如 int?),default 返回的是 null 而不是基础类型的默认值。

int? nullableInt = default; // nullableInt = null
DateTime? nullableDate = default; // nullableDate = null

2. 初始化集合

在初始化集合(如数组、列表等)时,default 可以用来填充元素的默认值。

int[] numbers = new int[5] { default, default, default, default, default }; // 全部元素为 0
List<string> strings = new List<string>(new string[3] { default, default, default }); // 全部元素为 null

3. 异步编程

在异步方法中,default 可以用来处理任务完成前的状态。例如,你可以用它来表示尚未开始的任务或取消的任务。

Task<int> task = default(Task<int>);
//Task<int> task = default;
if (task == null)
{Console.WriteLine("Task has not been initialized.");
}

五、default 运算符与 default 文本

1. default 运算符

default 运算符的实参必须是类型或类型形参的名称,如以下示例所示:

Console.WriteLine(default(int));  // output: 0
Console.WriteLine(default(object) is null);  // output: Truevoid DisplayDefaultOf<T>()
{var val = default(T);Console.WriteLine($"Default value of {typeof(T)} is {(val == null ? "null" : val.ToString())}.");
}DisplayDefaultOf<int?>();
DisplayDefaultOf<System.Numerics.Complex>();
DisplayDefaultOf<System.Collections.Generic.List<int>>();
// Output:
// Default value of System.Nullable`1[System.Int32] is null.
// Default value of System.Numerics.Complex is (0, 0).
// Default value of System.Collections.Generic.List`1[System.Int32] is null.

2. default 文本

当编译器可以推断表达式类型时,可以使用 default 文本生成类型的默认值。 default 文本表达式生成与 default(T) 表达式(其中,T 是推断的类型)相同的值。 可以在以下任一情况下使用 default 文本:

  • 对变量进行赋值或初始化时。
  • 在声明可选方法参数的默认值时。
  • 在方法调用中提供参数值时。
  • 在 return 语句中或作为表达式主体成员中的表达式时。
T[] InitializeArray<T>(int length, T initialValue = default)
{if (length < 0){throw new ArgumentOutOfRangeException(nameof(length), "Array length must be nonnegative.");}var array = new T[length];for (var i = 0; i < length; i++){array[i] = initialValue;}return array;
}void Display<T>(T[] values) => Console.WriteLine($"[ {string.Join(", ", values)} ]");Display(InitializeArray<int>(3));  // output: [ 0, 0, 0 ]
Display(InitializeArray<bool>(4, default));  // output: [ False, False, False, False ]System.Numerics.Complex fillValue = default;
Display(InitializeArray(3, fillValue));  // output: [ (0, 0), (0, 0), (0, 0) ]

结语

回到目录页:C#/.NET 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。


参考资料:
默认值表达式 - 生成默认值

相关文章:

C# 中 default 使用详解

总目录 前言 在C#中&#xff0c;default 关键字用于表示类型默认值。它可以根据上下文推断出适用的类型&#xff0c;并返回该类型的默认值。随着C#版本的发展&#xff0c;default 的用法也变得更加丰富和灵活。本文将详细介绍 default 在不同场景下的使用方法及其最佳实践。 一…...

Day21-【软考】短文,计算机网络开篇,OSI七层模型有哪些协议?

文章目录 OSI七层模型有哪些&#xff1f;有哪些协议簇&#xff1f;TCP/IP协议簇中的TCP协议三次握手是怎样的&#xff1f;基于UDP的DHCP协议是什么情况&#xff1f;基于UDP的DNS协议是什么情况&#xff1f; OSI七层模型有哪些&#xff1f; 题目会考广播域 有哪些协议簇&#x…...

电力晶体管(GTR)全控性器件

电力晶体管&#xff08;Giant Transistor&#xff0c;GTR&#xff09;是一种全控性器件&#xff0c;以下是关于它的详细介绍&#xff1a;&#xff08;模电普通晶体管三极管进行对比学习&#xff09; 基本概念 GTR是一种耐高电压、大电流的双极结型晶体管&#xff08;BJT&am…...

C语言------指针从入门到精通

第一部分: 前言: 本篇文章主要划分为两大部分: 第一部分适合零基础的同学,主要学习了解指针的概念&#xff0c;对指针大概有个概念。如果你已经有基础,即可跳过第一部分的内容。 第二部分主要是分解指针的实现逻辑,通过19个例子,再结合代码公式把不同类型的指针及指针的应用详细…...

网络安全大模型和人工智能场景及应用理解

本文通过通俗易懂的方式的进行阐述&#xff0c;大家读完觉得有帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; 一、网络安全大模型的概述 网络安全大模型是一种用于识别和应对各种网络安全威胁的模型。它通过分析网络数据包、网络行为等信息&#xff0c;识别潜在…...

大模型正确调用方式

1、ollama 安装 curl -fsSL https://ollama.com/install.sh | sh 如果是AutoDl服务器&#xff0c;可以开启学术加速。 source /etc/network_turbo 本次使用腾讯云Cloud Studio&#xff0c;所以已经安装好了 Ollama 2、启动 ollama run 模型的名字 ollama serve # 开启服务 olla…...

rocketmq原理源码分析之控制器模式- dledger

简介 RocketMQ 4.5 版本之前&#xff0c;RocketMQ 的broker是 Master/Slave部署架构&#xff0c;一组 broker 有一个 Master &#xff0c;有0到若干Slave&#xff0c;Slave复制Master消息存储&#xff0c;随时替代下线的Master。Master/Slave部署架构提供一定的高可用性&#x…...

Deployment 部署 Pod 流程

文章目录 k8s组件介绍部署文件示例部署 Pod 流程创建 Service 通过创建 Deployment 资源&#xff0c;来看看 k8s 部署 Pod 流程 k8s组件介绍 首先看看 k8s 各组件功能。 control plane 控制平面主要包含以下组件&#xff1a; kube-api-server: 顾名思义&#xff0c;负责处理所…...

塔罗牌(基础):大阿卡那牌

塔罗牌&#xff08;基础&#xff09; 大啊卡那牌魔术师女祭司皇后皇帝教皇恋人战车力量隐士命运之轮正义吊人死神节制恶魔高塔星星月亮太阳审判世界 大啊卡那牌 魔术师 作为一个起点&#xff0c;象征&#xff1a;意识行动和创造力。 一个【显化】的概念&#xff0c;即是想法变…...

TCP/IP 协议:互联网通信的基石

TCP/IP 协议:互联网通信的基石 引言 TCP/IP协议,全称为传输控制协议/互联网协议,是互联网上应用最为广泛的通信协议。它定义了数据如何在网络上传输,是构建现代互联网的基础。本文将深入探讨TCP/IP协议的原理、结构、应用以及其在互联网通信中的重要性。 TCP/IP 协议概述…...

Python 之 Excel 表格常用操作

示例文件 test.xlsx 将各个表单拆分成单独的 Excel 文件 import os.pathimport openpyxl import pandasdef handle_excel(file_path):dirname os.path.dirname(file_path)basename os.path.basename(file_path).split(".")[0]wb openpyxl.load_workbook(file_pat…...

2025春招 SpringCloud 面试题汇总

大家好&#xff0c;我是 V 哥。SpringCloud 在面试中属于重灾区&#xff0c;不仅是基础概念、组件细节&#xff0c;还有高级特性、性能优化&#xff0c;关键是项目实践经验的解决方案&#xff0c;都是需要掌握的内容&#xff0c;正所谓打有准备的仗&#xff0c;秒杀面试官&…...

jupyter版本所引起的扩展插件问题

文章目录 如何永久切换python安装源为https://mirrors.aliyun.com/pypi/simple方法一&#xff1a;通过配置文件永久设置&#xff08;推荐&#xff09;步骤 1&#xff1a;创建或修改 pip 配置文件步骤 2&#xff1a;验证配置是否生效 方法二&#xff1a;通过命令行直接配置效果验…...

01机器学习入门

机器学习入门可以分为以下几个阶段&#xff0c;逐步掌握核心概念和技能&#xff1a; 1. 基础准备 数学基础 线性代数&#xff1a;矩阵运算、向量空间&#xff08;推荐《线性代数及其应用》&#xff09;。概率与统计&#xff1a;概率分布、贝叶斯定理、假设检验&#xff08;推…...

实现一个安全且高效的图片上传接口:使用ASP.NET Core和SHA256哈希

实现一个安全且高效的图片上传接口&#xff1a;使用ASP.NET Core和SHA256哈希 在现代Web应用程序中&#xff0c;图片上传功能是常见的需求之一。无论是用户头像、产品图片还是文档附件&#xff0c;确保文件上传的安全性和效率至关重要。本文将详细介绍如何使用ASP.NET Core构建…...

PyTorch中的movedim、transpose与permute

在PyTorch中&#xff0c;movedim、transpose 和 permute这三个操作都可以用来重新排列张量&#xff08;tensor&#xff09;的维度&#xff0c;它们功能相似却又有所不同。 movedim &#x1f517; torch.movedim 用途&#xff1a;将张量的一个或多个维度移动到新的位置。参数&…...

HTTP(1)

HTTP协议 HTTP是什么 HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的基于TCP协议的应用层协议。 常见的应用场景&#xff1a; 浏览器与服务器之间的交互&#xff08;访问网站&#xff09;手机与服务器之间的通信多个服务器之间进行通信 …...

C#常考随笔2:函数中多次使用string的+=处理,为什么会产生大量内存垃圾(垃圾碎片),有什么好的方法可以解决?

在 C# 中&#xff0c;由于string类型是不可变的&#xff0c;当在函数中多次使用操作符来拼接字符串时&#xff0c;每次操作都会创建一个新的string对象&#xff0c;旧的对象则成为垃圾对象&#xff0c;这会导致大量的内存分配和垃圾回收&#xff0c;产生内存垃圾和碎片。 在需…...

leetcode刷题记录(一百)——121. 买卖股票的最佳时机

&#xff08;一&#xff09;问题描述 121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09;121. 买卖股票的最佳时机 - 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票&#xff0c;并…...

MATLAB绘图时线段颜色、数据点形状与颜色等设置,介绍

MATLAB在绘图时&#xff0c;设置线段颜色和数据点的形状与颜色是提高图形可读性与美观性的重要手段。本文将详细介绍如何在 MATLAB 中设置这些属性。 文章目录 线段颜色设置单字母颜色表示法RGB 值表示法 数据点的形状与颜色设置设置数据点颜色和形状示例代码 运行结果小结 线段…...

Rydberg原子量子门实现原理与优化技术

1. Rydberg原子平台中的量子门实现基础1.1 Rydberg原子特性与量子计算优势Rydberg原子是指外层电子被激发到高主量子数能级的原子态&#xff0c;这类原子具有三个关键特性使其成为量子计算的理想平台&#xff1a;强偶极-偶极相互作用&#xff1a;当两个原子同时处于Rydberg态时…...

信息系统项目管理师核心知识点精讲

一、项目整合管理(重点:项目章程与项目管理计划) 知识点详解: 项目整体管理是项目管理知识体系的核心,它确保项目各要素协调统一。在考试中,特别要掌握项目章程和项目管理计划的区别与联系。 项目章程是项目的“出生证明”,由项目发起人发布。它正式授权项目,赋予项…...

51单片机驱动ST7735S彩屏避坑指南:从5秒刷屏到流畅贪吃蛇的优化实战

51单片机驱动ST7735S彩屏性能优化实战&#xff1a;从卡顿到流畅游戏的蜕变之路当一块128x160分辨率的ST7735S彩屏遇上传统的51单片机&#xff0c;这种组合看似矛盾却又充满挑战。许多开发者初次尝试时会发现&#xff0c;原本在STM32等平台上运行流畅的显示驱动&#xff0c;移植…...

2026 西安 AI 问答曝光搭建技术解析:GEO 知识图谱 + 深度测评

随着大语言模型技术的快速普及&#xff0c;AI 搜索已经成为用户获取企业信息、商家服务的核心入口。根据中国互联网信息中心 2026 年发布的《中国人工智能搜索发展报告》显示&#xff0c;2025 年国内 AI 搜索用户规模突破 8.2 亿&#xff0c;日均搜索请求超过 20 亿次&#xff…...

内存占用3KB!极致瘦身释放MCU无限可能

极致小体积&#xff0c;给工业领域带来了无限的可能&#xff1a;更低硬件成本&#xff0c;更小芯片体积&#xff0c;更低功耗&#xff0c;更高可靠性&#xff0c;让每一颗小MCU都拥有大系统的完整能力。 https://www.bilibili.com/video/BV1eZLi6PEjc/?spm_id_from333.1387.ho…...

荣耀出征官方网站下载正版手游 翅膀养成细节玩法全方位讲解

玩荣耀出征的玩家都清楚&#xff0c;翅膀不仅是角色的颜值象征&#xff0c;更是提升整体战力的核心途径。很多新手玩家只顾着升级、刷装备&#xff0c;完全忽略翅膀养成&#xff0c;导致等级很高但战力始终上不去。还有不少玩家胡乱合成、盲目进阶&#xff0c;浪费了大量稀有翅…...

可解释AI新突破:基于局部帕累托最优的模型解释框架

1. 项目概述&#xff1a;当AI模型成为“黑箱”&#xff0c;我们如何撬开它&#xff1f;在机器学习项目里摸爬滚打十几年&#xff0c;我见过太多这样的场景&#xff1a;团队花大力气训练出一个准确率高达95%的复杂模型&#xff08;比如深度神经网络&#xff09;&#xff0c;业务…...

Windows Cleaner:终极免费系统清理工具,彻底解决C盘空间不足问题

Windows Cleaner&#xff1a;终极免费系统清理工具&#xff0c;彻底解决C盘空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到C盘爆红、…...

多模型聚合平台如何助力网站AIB测试与选型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 多模型聚合平台如何助力网站AIB测试与选型 对于网站产品经理而言&#xff0c;首页文案的生成质量直接影响用户的第一印象和转化率。…...

League Akari:如何通过LCU API实现英雄联盟游戏流程的智能化管理?

League Akari&#xff1a;如何通过LCU API实现英雄联盟游戏流程的智能化管理&#xff1f; 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit Leag…...