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;
C# 7.1中default关键字的新用法的更多相关文章
- static关键字的新用法
static关键字的新用法和总结: static这个关键字,也可以像“self”一样,代表“当前类”,用于访问一个类的“静态属性或静态方法”: 但, static,在应用中,更灵活,因此更常见! 因为 ...
- C#中 this关键字 四种用法
/// <summary> /// 主程序入口 /// </summary> /// <param name="args"></param ...
- 解析Java中final关键字的各种用法
首先,我们可以从字面上理解一下final这个英文单词的中文含义:“最后的,最终的; 决定性的; 不可更改的:”.显然,final关键词如果用中文来解释,“不可更改的”更为合适.当你在编写程序,可能会遇 ...
- JAVA8中接口的一些新用法(springboot环境)
@Configuration public interface IAbstractConvertStrategy { CacheService getCacheService(); default b ...
- C#中default 、base 、this关键字用法简介
C#中default关键字用法简介 default 关键字可在switch语句或泛型代码中使用.switch语句:指定默认标签.泛型代码:指定类型参数的默认值.对于引用类型为空,对于值类型为零swi ...
- default 关键字泛型代码中的默认关键字(C# 编程指南)
在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T: T 是引用类型还是值类型. 如果 T 为值类型,则它是数值还是结构. 给定参数化类型 T 的一个变量 t ...
- C#default关键字(泛型代码中的默认关键字)
在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T:T 是引用类型还是值类型.如果 T 为值类型,则它是数值还是结构.给定参数化类型 T 的一个变量 t,只有 ...
- 泛型代码中的 default 关键字
在泛型类和泛型方法中会出现的一个问题是,如何把缺省值赋给参数化类型,此时无法预先知道以下两点: l T将是值类型还是引用类型 l 如果T是值类型,那么T将是数值还是结构 对 ...
- Delphi中的关键字与保留字
Delphi中的关键字与保留字 分类整理 Delphi 中的“关键字”和“保留字”,方便查询 感谢原作者的收集整理! 关键字和保留字的区别在于,关键字不推荐作标示符(编译器已经内置相关函数或者留给保留 ...
随机推荐
- GitHub和Git(待补充)
仓库(Repository):存放项目代码,每个项目对应一个仓库. 收藏(Star) 复制(Fork):克隆并生成新的仓库,from某某.以此为基础修改或应用项目.pull request,源仓库会查 ...
- android-mediaplayer播放
优先参考 待补充.android 8.0
- Javaweb 编解码流程
参考: https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/#N10263 https://www.cnblogs.com/ch ...
- 简析 __init__、__new__、__call__ 方法
简析 __init__.__new__.__call__ 方法 任何事物都有一个从创建,被使用,再到消亡的过程,在程序语言面向对象编程模型中,对象也有相似的命运:创建.初始化.使 用.垃圾回收,不同的 ...
- hbuilder真机调试时,手机端无法连接电脑测试的处理办法
首先保证手机端与电脑处在同一网段 关闭电脑防火墙 电脑服务端需要配置iis网站,同时在hbuilder的manifest.json 配置与iis网站ip一致的url
- CSS3中很容易混淆的transform,translate,transition。如何去区分,以及综合写法。
属性 含义 transition(过渡) 用于设置元素的样式过度,和animation有着类似的效果,但细节上有很大的不同 transform(变形) 用于元素进行旋转.缩放.移动或倾斜,和设 ...
- Java-异常初步练习
案例一: package com.esandinfo; /** * 自定义一个Exception类 */ class MyCustomException extends RuntimeExceptio ...
- Java中的NIO基础知识
上一篇介绍了五种NIO模型,本篇将介绍Java中的NIO类库,为学习netty做好铺垫 Java NIO 由3个核心组成,分别是Channels,Buffers,Selectors.本文主要介绍着三个 ...
- PHP判断访问系统的用户设备类型
当今的电子设备越来越多,我们在开发过程中往往也需要分析用户使用的电子设备类型.下面是采用PHP代码来获取用户使用的哪些类型的电子设备来访问自己的平台. /** * 用户设备类型 * @return s ...
- Jquery Ajax Realize whether the user is registered
XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页.当页面全部加载完毕后,客户端通过该对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据. XMLHt ...