C#6の新機能
C#6の新しいC#コンパイラがあります。これは、完全なソースコードのクリーンアップです。カスタムプログラムは、今も、コンパイラパイプラインの特性を使用し、およびVisual Studioの機能の多くを使用することができます。
この新しいプラットフォームは、多くの新機能を備えたC#コンパイラの改善のC#することができます。これらの機能は、キーワードLINQや大きなインパクト非同期(async)のものではなく、多くの改良点は、開発者の生産性を高めているが。C#6何が変わりましたか?
0.3.1静的usingステートメント
C#5
using System;
Console.WriteLine("Hello,World!");
C#6
using static System.Console;
WirteLine("Hello,World!");
0.3.2式のボディ方法
身体表現方法だけ文がラムダ構文を使用して書き込むことができます含まれています。
C#5
public bool IsSquare(int num)
{
return num == 0;
}
C#6
public bool IsSquare(int num) => num == 0;
0.3.3式のボディプロパティ
この方法は、一方向のみのプロパティはアクセサラムダ構文が書き込まれますが、その表現に似ています。
C#5
public string FullName
{
get
{
return FirstName + " " + LastName;
}
}
C#6
public string FullName => FirstName + " " + LastName;
0.3.4自動的に属性初期化子
C#5
public class Person
{
public Person()
{
Age = 24;
}
public int Age {get; set;}
}
C#6
public class Person
{
public int Age {get; set;} = 42;
}
0.3.5自動読み取り専用属性
読み取り専用属性を達成するために、C#5は、完全な属性構文を必要とします。C#6で、属性が自動的に使用することができます。
C#5
private readonly int _bookId;
public int BookId {
get
{
return _bookId;
}
}
C#6
public int BookIdTest { get; }
0.3.6がNameOf演算子
new演算子がNameOf、フィールド名、属性名、タイプ名やメソッド名にアクセスすることができます。このように、復興に、それは行方不明の名前は変更されません。
C#5
public void Method(object o)
{
if (o == null) throw new System.ArgumentNullException("o");
}
C#6
public void MethodTest(object o)
{
if (o == null) throw new System.ArgumentNullException(nameof(o));
}
0.3.7ヌル伝搬演算子
Nullの伝播の演算子の簡素化検査ヌル値:
C#5
int? age = p = null ? null : p.Age;
C#6
int? age = p?.Age;
C#5
var handler = Event;
if(handler != null)
{
handler(source,e)
}
C#6
handler?.Invoke(source,e)
0.3.8文字列補間
文字列の補間は、文字列形式の番号のプレースホルダで使用されていないString.Formatのへの呼び出しを、削除、プレースホルダは、式を含むことがあります。
C#5
public override ToString()
{
return string.Format("{0},{1}",Title,Publisher)
}
C#6
public override ToString() => #"{Title} {Publisher}"
0.3.9辞書初期化子
辞書は現在、コレクション初期化子に類似初期化するために初期化することができます。
C#5
var dict = new Dictionary<int,string>();
dict.Add(3,"three");
dict.Add(7,"seven");
C#6
var dict = new Dictionary<int,string>()
{
[3] = "three",
[7] = "seven"
};
0.3.10例外フィルタ
彼らは例外をキャッチする前に異常なフィルタは、フィルタすることができます。
C#5
try
{
}
catch(MyException ex)
{
if(ex.ErrorCode != 405) throw;
}
C#6
try
{
}
catch(MyException ex) when (ex.ErrorCode == 405)
{
}
新しい構文の利点の1つは、コードの長さを短くするだけでなく、およびスタックトレースに変化がない---- C#5は、スタックトレースを変更するということです。
0.3.11キャッチのawait
C#5
bool hasError = false;
string errorMessage = null;
try
{
}
catch (System.Exception ex)
{
hasError = true;
errorMessage = ex.Message;
}
if (hasError)
{
await new MessageDialog().ShowAsync(errorMessage);
}
C#6
try
{
}
catch (System.Exception ex)
{
await new MessageDialog().ShowAsync(errorMessage);
}