C#7.0新语法
一、out输出参数
在以前使用out输出参数的时候,必须先定义变量,然后才能使用,例如:
先定义一个方法,方法参数是out类型的输出参数:
private void DoNoting(out int x, out int y)
{
x = ;
y = ;
}
以前版本的写法:
// 必须先定义i、j,才能使用out参数
int i = ;
int j = ;
this.DoNoting(out i, out j);
Console.WriteLine($"i+j={i+j}");
在C#7.0中,可以不用先定义,就能够直接使用了:
this.DoNoting(out int x, out int y);
Console.WriteLine($"x+y={x + y}");
this.DoNoting(out var l, out var m);
结果:

二、模式
/// <summary>
/// 具有模式的 IS 表达式
/// </summary>
/// <param name="o"></param>
public void PrintStars(object o)
{
if (o is null) return; // 常量模式 "null"
if (!(o is int i)) return; // 类型模式 定义了一个变量 "int i" i的值就是o的值 相当于is类型判断
Console.WriteLine($"i={i}");
}
使用方法:
this.PrintStars(null);
this.PrintStars();
结果:

除了可以像上面那样使用外,还可以使用下面的方式:
private void Switch(string text)
{
int k = ;
switch (text)
{
case "Tom" when k > : // text="Tom"且k<10才会输出Tom
Console.WriteLine("Tom");
break;
case "Joe" when text.Length < : //text="Joe"且text的长度<10才会输出Joe
Console.WriteLine("Joe");
break;
case string s when s.Length > ://模式 定义变量s,s就是text的值
Console.WriteLine(s);
break;
default:
Console.WriteLine("default");
break;
case null:
Console.WriteLine("null");
break;
}
}
调用:
this.Switch(null);
this.Switch("TomTomKevin");
this.Switch("JoeForest");

三、元组
先来看下面的两个方法:
/// <summary>
/// 使用默认参数名称
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private (string, string, string) LookupName(long id) // tuple return type
{
return ("first", "middle", "last");
} /// <summary>
/// 不使用默认参数名称
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private (string first, string middle, string last) LookupNameByName(long id) // tuple return type
{
return ("first", "middle", "last");
//return (first: "first", middle: "middle", last: "last");
}
调用:
// 使用默认参数名称:Item1、Item2、Item3
Console.WriteLine($"使用默认参数名称");
var result = this.LookupName();
Console.WriteLine(result.Item1);
Console.WriteLine(result.Item2);
Console.WriteLine(result.Item3);
// 不使用默认参数名称
Console.WriteLine($"不使用默认参数名称");
var result2 = this.LookupNameByName();
Console.WriteLine(result2.first);
Console.WriteLine(result2.middle);
Console.WriteLine(result2.last);
// 也可以使用默认参数名称
Console.WriteLine($"也可以使用默认参数名称");
Console.WriteLine(result2.Item1);
Console.WriteLine(result2.Item2);
Console.WriteLine(result2.Item3);
结果:

四、数字分割
如果数字太长,可以按照一定的位数用“_”进行分割,例如:
long big = 100_000_0000;
Console.WriteLine($"big={big}");

C#7.0新语法的更多相关文章
- 第十六节:语法总结(3)(C#6.0和C#7.0新语法)
一. C# 6.0 新语法 1. 自动属性初始化可以赋值 /// <summary> /// 自动属性初始化 /// </summary> public class UserI ...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- c# 7.0 6.0 新语法
1.参考地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/tutorials/exploration/csharp-7?tutorial-step=5 ...
- Visual Studio 2019 preview中体验C# 8.0新语法
准备工作: Visual Studio 2019 Preview版本中并没有包含所有的C# 8.0的新功能,但目前也有一些可以试用了.在开始之前,需要进行入两项设置: 将Framework设置为.ne ...
- 使用 C# 9.0 新语法提升 if 语句美感
C# 语言一贯秉承简洁优美的宗旨,每次升级都会带来一些语法糖,让我们可以使代码变得更简洁.本文分享两个使用 C# 9.0 提升 if 语句美感的技巧示例. 使用属性模式代替 IsNullOrEmpty ...
- C#6.0新语法
.自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如: class MyClass { public int Age { get; set; } public string Nam ...
- 感受C#6.0新语法
作为一门专为程(yu)序(fa)员(tang)考虑的语言,感受一下来自微软的满满的恶意... 1. 字符串内联在之前的版本中,常用的格式化字符串: var s = String.Format(&quo ...
- c# 7.0新语法特性
public class NewAtturibute { public void TestFunc() { // 01 Out变量 不用初始化 "; if (int.TryParse(inp ...
- 1、ASP.NET MVC入门到精通——新语法
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...
随机推荐
- django-salmonella的使用
一.django-salmonella介绍 它是一个Django管理员raw_id_fields小部件替换,用于处理更改时显示对象的字符串值,并且可以通过模板覆盖. 二.安装 1.下载 $ pip i ...
- haproxy+keepalived配置haproxy反向代理的高可用
http://www.cnblogs.com/shantu/p/4586277.html
- Spring Security教程(六):自定义过滤器进行认证处理
这里接着上篇的自定义过滤器,这里主要的是配置自定义认证处理的过滤器,并加入到FilterChain的过程. 在我们自己不在xml做特殊的配置情况下,security默认的做认证处理的过滤器为Usern ...
- sqlite 判断表中是否包含 某个字段
数据库 都有一个 根表..(我的理解) 也就是 你创建了一个数据库 里面就带有 一个表 sqlite_master 字段有 type , name , tbl_name , rootpage ,sq ...
- 在 Visual Studio 2017 中找回消失的“在浏览器中查看”命令
不知为何,在新安装 Visual Studio 2017 后,发现所有 Web 项目上右键菜单的"在浏览器中查看"命令消失了,只能以调试模式启动网站,非常别扭. 最后在 Stack ...
- eclipse下SVN subclipse插件
本文目的 让未使用过版本控制器软件或者未使用过subversion软件的人员尽快上手. subversion的使用技巧很多,这里只总结了最小使用集,即主要的基本功能,能够用来应付日常工作. 因此不涉及 ...
- webBrowser获取cookie
private void BtnOpenUrl_Click(object sender, EventArgs e) { if (txtUrl.Text != "") { Myweb ...
- FFmpeg(11)-基于FFmpeg进行音频重采样(swr_init(), swr_convert())
一.包含头文件和库文件 修改CMakeLists # swresample add_library(swresample SHARED IMPORTED) set_target_properties( ...
- (原创)c++11改进我们的模式之改进表驱动模式
所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获取值.表驱动是将一些通过较为复杂逻辑语句来得到数据信息的方式,通过查询表的方式来实现,将数据信息存放在表里.对于消除 ...
- linux命令(52):usermod 修改账户信息,groupmod
usermod: usermod [options] user_name usermod 命令修改系统帐户文件来反映通过命令行指定的变化 选项(options) -a|--append ##把用户追 ...