本文为转载,学习研究

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的更多相关文章

  1. Professional C# 6 and .NET Core 1.0 - 37 ADO.NET

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET -------- ...

  2. Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework ...

  3. Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services

    本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Servi ...

  4. Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core --- ...

  5. Professional C# 6 and .NET Core 1.0 - Chapter 43 WebHooks and SignalR

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 43 WebHooks ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. Professional C# 6 and .NET Core 1.0 - Chapter 42 ASP.NET Web API

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处: -------------------------------------------------------- ...

  10. 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 ...

随机推荐

  1. Struts2---声明式异常处理

    在service方法里 throw抛出一个异常, 然后再方法声明上加上throws: public List<Category> list() throws SQLException{ C ...

  2. H5手机开发锁定表头和首列(惯性滚动)解决方案

    前端时间移动端在做表格的时候需要这个功能,由于还有实现类似原生的惯性滚动功能,于是使用了iscroll插件. iscroll插件下载地址:iscroll5 该功能demo github地址: http ...

  3. unable to fund vcvarsall.bat

    通过easy_install安装gfirefly的时候,发生了unable to fund vcvarsall.bat的问题, 于是去网上搜索了一下,看到这个帖子,看起来应该是终极解决方案: 彻底解决 ...

  4. 负载均衡 LVS+Keepalived

    系统  CentOS 5.6 X64 物理机 IP 10.10.10.104 Xen : 三台 CentOS 5.8 ip为: 10.10.10.106        10.10.10.107     ...

  5. eclipse创建Maven父子结构Maven项目

    1.创建聚合模块 选择菜单项 File—>New—>Other,在弹出的对话框中选择Maven下的Maven Project,然后单击Next按钮,在弹出的New Maven Projec ...

  6. Android 5.0之前屏幕截图的方法

    截图的几种方法 Android获取屏幕截图主要有以下三种方法 1.通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏. 这种方式Android 5.0之前也可以,且不 ...

  7. nginx实战

    原文:http://www.cnblogs.com/yucongblog/p/6289628.html nginx实战   (一) nginx环境的搭建安装流程: 1 通过ftp将nginx-1.11 ...

  8. 《算法导论》习题2.3-7 查找集合S中是否有两个元素和为X---Java实现

    代码如下: public class MergeSort { public static void sort(int [] A,int p, int r) { if(p<r) { int q = ...

  9. Java的内存泄漏

    内存泄漏是指,无用对象(不再使用的对象)持续占用内存或者无用对象的内存得不到及时释放,从而造成的内存浪费 就说是有一块内存你不需要再用了,但是呢你还保留着它的指针,那么这块内存就不会被回收 举个例子 ...

  10. java实现——008旋转数组的最小数字

    public class T008 { public static void main(String[] args) { int[] num = { 3, 4, 5, 1, 2 }; System.o ...