Professional C# 6 and .NET Core 1.0 - What’s New in C# 6
本文为转载,学习研究
What’s New in C# 6
With C# 6 a new C# compiler is available. It’s not only that a source codecleanup
was done; the features of the compiler pipeline can now be used from custom
programs, and are used by many features of Visual Studio.
This new compiler platform made it possible to enhance C# with many new
features. Although there’s not a feature with such an impact as LINQ orthe async
keyword, the many enhancements increase developer productivity. What arethe
changes of C# 6?
static using
The static using declarationallows invoking static methods without the class
name:
In C# 5
using System;
// etc.
Console.WriteLine("Hello,World!");
In C# 6
using static System.Console;
// etc.
WriteLine("Hello,World");
The using static keyword iscovered in Chapter 2, “Core C#.”
Expression-Bodied Methods
With expression-bodied methods, a method that includes just one statementcan
be written with the lambda syntax:
In C# 5
public boolIsSquare(Rectangle rect)
{
return rect.Height == rect.Width;
}
In C# 6
public boolIsSquare(Rectangle rect) => rect.Height == rect.Width;
Expression-bodied methods are covered in Chapter 3, “Objects and Types.”
Expression-Bodied Properties
Similar to expression-bodied methods, one-line properties with only a getaccessor
can be written with the lambda syntax:
In C# 5
public string FullName
{
get
{
return FirstName +"" + LastName;
}
}
In C# 6
public string FullName=> FirstName +"" + LastName;
Expression-bodied properties are covered in Chapter 3.
Auto-Implemented PropertyIntializers
Auto-implemented properties can be initialized with a propertyinitializer:
In C# 5
public class Person
{
public Person()
{
Age = 24;
}
public int Age {get; set;}
}
In C# 6
public class Person
{
public int Age {get; set;} = 42;
}
Auto-implemented property initializers are covered in Chapter 3.
Read-Only Auto Properties
To implement read-only properties, C# 5 requires the full property syntax.With
C# 6, you can do this using auto-implemented properties:
In C# 5
private readonly int_bookId;
public BookId
{
get
{
return _bookId;
}
}
In C# 6
public BookId {get;}
Read-only auto properties are covered in Chapter 3.
nameof Operator
With the new nameof operator, namesof fields, properties, methods, or types can
be accessed. With this, name changes are not missed with refactoring:
In C# 5
public void Method(objecto)
{
if (o == null) throw newArgumentNullException("o");
In C# 6
public void Method(objecto)
{
if (o == null) throw newArgumentNullException(nameof(o));
The nameof operator iscovered in Chapter 8, “Operators and Casts.”
Null Propagation Operator
The null propagation operator simplifies null checks:
In C# 5
int? age = p == null ?null : p.Age;
In C# 6
int? age = p?.Age;
The new syntax also has an advantage for firing events:
In C# 5
var handler = Event;
if (handler != null)
{
handler(source, e);
}
In C# 6
handler?.Invoke(source,e);
The null propagation operator is covered in Chapter 8.
String Interpolation
The string interpolation removes calls to string.Format. Instead of using
numbered format placeholders in the string, the placeholders can include
expressions:
In C# 5
public override ToString()
{
return string.Format("{0}, {1}",Title, Publisher);
}
In C# 6
public override ToString()=> $"{Title} {Publisher}";
The C# 6 sample is reduced that much compared to the C# 5 syntax becauseit
uses not only string interpolation but also an expression-bodied method.
String interpolation can also use string formats and get special featureson
assigning it to a FormattableString. Stringinterpolation is covered in Chapter 10,
“Strings and Regular Expressions.”
Dictionary Initializers
Dictionaries can now be initialized with a dictionary initializer—similarto the
collection initializer.
In C# 5
var dict = newDictionary<int, string>();
dict.Add(3,"three");
dict.Add(7,"seven");
In C# 6
var dict = newDictionary<int, string>()
{
[3] ="three",
[7] ="seven"
};
Dictionary initializers are covered in Chapter 11, “Collections.”
Exception Filters
Exception filters allow you to filter exceptions before catching them.
In C# 5
try
{
//etc.
}
catch (MyException ex)
{
if (ex.ErrorCode != 405) throw;
// etc.
}
In C# 6
try
{
//etc.
}
catch (MyException ex)when (ex.ErrorCode == 405)
{
// etc.
}
A big advantage of the new syntax is not only that it reduces the codelength but
also that the stack trace is not changed—which happens with the C# 5variant.
Exception filters are covered in Chapter 14, “Errors and Exceptions.”
Await in Catch
await can now be usedin the catch clause. C# 5required a workaround.
In C# 5
bool hasError = false;
string errorMessage =null;
try
{
//etc.
}
catch (MyException ex)
{
hasError = true;
errorMessage = ex.Message;
}
if (hasError)
{
await newMessageDialog().ShowAsync(errorMessage);
}
In C# 6
try
{
//etc.
}
catch (MyException ex)
{
await newMessageDialog().ShowAsync(ex.Message);
}
This feature doesn’t need an enhancement of the C# syntax; it’sfunctionality
that’s working now. This enhancement required a lot of investment from
Microsoft to make it work, but that really doesn’t matter to you usingthis
platform. For you, it means less code is needed—just compare the twoversions.
NOTE The new C# 6 language features are covered in the mentioned
chapters, and in all chapters of this book the new C# syntax isused.
Professional C# 6 and .NET Core 1.0 - What’s New in C# 6的更多相关文章
- Professional C# 6 and .NET Core 1.0 - 37 ADO.NET
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET -------- ...
- Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework ...
- Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services
本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Servi ...
- Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core --- ...
- Professional C# 6 and .NET Core 1.0 - Chapter 43 WebHooks and SignalR
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 43 WebHooks ...
- Professional C# 6 and .NET Core 1.0 - Chapter 38 Entity Framework Core
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 38 Entity F ...
- Professional C# 6 and .NET Core 1.0 - Chapter 37 ADO.NET
本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET 译文:C# 6 与 .NE ...
- Professional C# 6 and .NET Core 1.0 - Chapter 41 ASP.NET MVC
What's In This Chapter? Features of ASP.NET MVC 6 Routing Creating Controllers Creating Views Valida ...
- Professional C# 6 and .NET Core 1.0 - Chapter 42 ASP.NET Web API
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处: -------------------------------------------------------- ...
- Professional C# 6 and .NET Core 1.0 - Creating Hello, World! with Visual Studio
本文为转载,学习研究 Creating Hello, World! with Visual Studio Chapter 1, “.NET Application Architectures,” ex ...
随机推荐
- 品牌笔记本预装windows的OEM分区解决方案(联想)
我的Y480出厂预装的win7,现在过了好久了,系统早就格盘重装成win8.1了,但是分区表里面还有个OEM分区.里面存的应该是预装的系统备份,跟笔记本电源键旁边的恢复键直接绑定......不过系统既 ...
- Application Fundamentals
Application Fundamentals 署名:译言biAji 链接:http://developer.android.com/guide/topics/fundamentals.html 应 ...
- ubuntu上安装vsftp-使用java进行匿名链接
检查环境: 1. 检查是否装过了ftp服务器 如果没有提示内容折,本机没有安装. root@hadoops:~# rpm -qa|grep vsftpdroot@hadoops:~# rpm -qa| ...
- CodeForces 625A Guest From the Past
贪心水题 #include <stdio.h> #include <algorithm> #include <string.h> #include <queu ...
- Laravel 使用简述
开始使用laravel 在此之前我们需要修改一些配置: app/config/app.php 文件中的 debug 选项设置为 true (注:开启开发模式,更友好的开发提示:网站运行时则关闭): a ...
- :after和:before中的content(放入icon)
作者:zccst 最近见到一种图标写在content里的用法,觉得很新奇.查了一下是webfont. 问题:以下是我看到的一段css的源代码,其实就是在分享到为微博的时候的图标 a#end_cc, a ...
- tools_list
http://files.cnblogs.com/files/yansc/ExportQingtaoImage.rar
- ADXL345加速度传感器驱动
ADXL345 是 ADI 公司的一款 3 轴.数字输出的加速度传感器.ADXL345 是 ADI 公司推 出的基于 iMEMS 技术的 3 轴.数字输出加速度传感器.该加速度传感器的特点有: ...
- iOS 发布流程 分类: ios相关 app相关 2015-05-22 14:50 186人阅读 评论(0) 收藏
1.登陆苹果开发者中心http://developer.apple.com(99美元账号) 2.进入itunes connect 3.选择Manage Your Apps 4.选择Add New Ap ...
- C++中string
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至 ...