C#6.0新语法
.自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如:
class MyClass
{
public int Age { get; set; }
public string Name { get; set; }
public MyClass()
{
Age = ;
Name = "张三";
}
} 新用法(声明时可同时初始化,更方便了),例如:
class MyClass
{
public int Age { get; set; } = ;
public string Name { get; set; } = "张三";
} .String.Format的改进(有用) 原来的用法:用string.Format(…)实现,例如:
class MyClass
{
public void MyMethod()
{
string name = "张三";
int age = ;
string s1 = string.Format("{0},{1}", name, age);
string s2 = string.Format("姓名={0},年龄={1}", name, age);
string s3 = string.Format("{0,15},{1:d3}", name, age);
string s4 = string.Format("{0,15},{1,10:d3}", name, age);
Console.WriteLine("{0},{1},{2},{3}", s1, s2, s3 ,s4);
string s5 = string.Format("{0:yyyy-MM-dd}", DateTime.Now);
}
} 新用法:用“$”前缀实现(变量直接写到大括号内,而且带智能提示,更方便了),例如:
class MyClass
{
public void MyMethod()
{
string name = "张三";
int age = ;
string s1 = $"{name},{age}";
string s2 = $"姓名={name},年龄={age}";
string s3 = $"{name,15},{age:d3}";
string s4 = $"{name,15},{age,10:d3}";
Console.WriteLine($"{s1},{s2},{s3},{s4}");
string s5 = $"{DateTime.Now:yyyy-MM-dd}";
}
} 、字典的初始化
原来的用法:
class MyClass
{
public void MyMethod()
{
Dictionary<string, int> student = new Dictionary<string, int>();
student.Add("a1", );
student.Add("a2", );
student.Add("a3", );
}
} 新用法(可以直接写初始化的值,更方便了):
class MyClass
{
public void MyMethod()
{
Dictionary<string, int> student = new Dictionary<string, int>()
{
["a1"] = ,
["a2"] = ,
["a3"] =
};
}
} 、可以用static声明静态类的引用 原来的用法:
using System;
namespace MyApp
{
class Demo1New
{
public static double MyMethod(double x, double angle)
{
return Math.Sin(x) + Math.Cos(angle);
}
}
} 新用法(表达式比较复杂的时候有用,代码更简洁了):
using static System.Math;
namespace MyApp
{
class Demo1New
{
public static double MyMethod(double x, double angle)
{
return Sin(x) + Cos(angle);
}
}
} 、nameof表达式 假定WPF应用程序中有下面的类:
public class MyClass
{
public string MyText { get; set; } = "aaa";
} 并假定有下面的XAML代码:
<StackPanel>
<TextBlock Name="txt1"/>
……
</StackPanel> 代码隐藏类中原来的用法:
txt1.SetBinding(TextBlock.TextProperty, "MyText"); 现在的用法(因为有错误检查智能提示,用起来更方便了):
txt1.SetBinding(TextBlock.TextProperty, nameof(MyClass.MyText)); 、Null-条件表达式 var ss = new string[] { "Foo", null };
var length0 = ss []?.Length; // 结果为3
var length1 = ss []?.Length; // 结果为null
var lengths = ss.Select (s => s?.Length ?? ); //结果为[3, 0] 、在try-catch-finally中使用await 异步编程中,原来在catch或者finally中无法使用await,现在可以了:
async void SomeMethod()
{
try
{
//...etc...
}
catch (Exception x)
{
var diagnosticData = await GenerateDiagnosticsAsync (x);
Logger.log (diagnosticData);
}
finally
{
await someObject.FinalizeAsync();
}
}
C#6.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新语法
作为一门专为程(yu)序(fa)员(tang)考虑的语言,感受一下来自微软的满满的恶意... 1. 字符串内联在之前的版本中,常用的格式化字符串: var s = String.Format(&quo ...
- C#7.0新语法
一.out输出参数 在以前使用out输出参数的时候,必须先定义变量,然后才能使用,例如: 先定义一个方法,方法参数是out类型的输出参数: private void DoNoting(out int ...
- 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的新特 ...
随机推荐
- 【EMV L2】数据元格式 & 对齐方式
[数据元格式] [对齐方式] 摘录:<中国金融集成电路(IC)卡规范 第6部分:借记贷记应用终端规范.pdf>- 8 终端数据
- win10磁盘/cpu占用100%问题
https://www.zhihu.com/question/27664545 https://www.zhihu.com/question/27664545 微软自己的解决办法 https://su ...
- 帝国CMS系统标签e:loop调用的附加SQL条件和排序参数
帝国CMS6.5以上版本在原来所有信息调用标签基础上增加了两个标签参数:“附加SQL条件”和“显示排序”.支持这两个参数的标签有如下:ecmsinfo.灵动标签.phomenews.phomenews ...
- s21day15 python笔记
s21day15 python笔记 一.内容回顾及补充 回顾 补充 range / xrange(python2与python3的区别六) python2: xrange:不会在内存中立即创建,而是在 ...
- vue 项目搭建步骤
环境搭建步骤: 打开git ,运行 npm install --global vue-cli 这是安装vue的命令行 vue init webpack vue-demo 这是vue基于webpack的 ...
- Egret_时间与运行
1.加载资源 2.将显示对象添加到显示列表 /////////////*****************************动态帧频******************************** ...
- 浅谈get,post,put和delete请求
get.put.post.delete含义与区别 1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影 ...
- 12集合(2)-----Set
一.总体分类 Collection(包括方法add,remove,contains,clear,size) List(接口) LinkedList ArrayList Vector---Stack 2 ...
- PA教材提纲 TAW12-2
Unit1 Adjustment of SAP Standard Software(SAP标准软件修改) 1.1 Adjusting SAP Standard Software(如何修改SAP标准软件 ...
- js中substr、substring、slice的区别
substr(start, length) substring(from, to) slice(from, to) 以上函数只传一个参数时,认为是起始位置,然后按照正方向截取 substring的参数 ...