C# 7.1中default关键字的新用法
default 关键字有两类用法
- switch语句中指定默认标签
- 默认值表达式
switch 语句#
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default case");
break;
}
默认值表达式#
default对应各种类型生成默认值列表如下:
类型 | 默认值 |
---|---|
任何引用类型 | null |
数值类型 | 零 |
bool | false |
enum | 表达式 (E)0 生成的值,其中 E 是枚举标识符。 |
struct | 通过如下设置生成的值:将所有值类型的字段设置为其默认值,将所有引用类型的字段设置为null 。 |
可以为 null 的类型 | HasValue 属性为 false 且 Value 属性未定义的实例。 |
罗列一下上述列表中的常见类型对应的值
在C# 7.1 之前
default(string) // null
default(int) // 0
default(int?) // null
default(dynamic) // null
default(DateTime) // 0001/01/01 0:00:00
default(DateTime?) // null
默认文本和类型推理#
C# 7.1 default的使用常见举例
Visual Studio 2017 默认C#语言版本是7.0,需要自己设置7.1
Alt+Enter快捷键打开项目属性,或者右键点击项目,选择属性,之后选择生成,点击高级,如下图
打开高级生成设置,选择语言版本,选C# 7.1 及以上的版本,如下图
如果没有C# 7.1 及以上的版本可选,请下载.NET Framework 4.7.2,现在最新版本的是4.7.2,直接下载最新版本的,省事。然后重启VS,就能看到7.1及以上的可选项。
变量初始值设定项#
7.1之前:
var dstring = default(string);
var dint = default(int);
var dintNull = default(int?);
var d = default(dynamic);
var dt = default(DateTime);
var dt1 = default(DateTime?);
7.1:
string s = default;
int i = default;
DateTime? dt = default;
dynamic d = default;
变量赋值#
7.1之前:
var s = "字符串";
s = default(string);
7.1:
var s = "字符串";
s = default;
声明可选参数的默认值#
7.1之前:
void Test(int a, string b = null)
{
}
7.1:
void Test(int a, string b = default)
{
}
为方法调用参数提供值#
7.1之前:
static void Test(int a, string b)
{
}
static void Main(string[] args)
{
Test(0, null);
}
7.1:
static void Test(int a, string b)
{
}
static void Main(string[] args)
{
Test(default, default);
}
返回语句#
7.1之前:
static string Test()
{
return null;
}
7.1:
static string Test()
{
return default;
}
expression bodied 成员中的表达式#
7.1之前:
public string A => null;
7.1:
public string A => default;
作者:repeatedly
出处:https://www.cnblogs.com/AlienXu/p/9494676.html
本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2017-07-05 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程