C# 6.0が正式リリースされたので、どんな機能が実装されたのかを勉強してみたいと思います。この投稿は、Channel 9で公開されてるde:code 2015のセッション「C# 6.0新機能」を元にしたものです。
C# 6.0 の新機能概要
非常に大きな言語変更はないが、数多く(10数個)の新機能が実装されています。
新機能の大部分は、開発者のコード量を削減し開発生産を高めることを目標としています。
- オーバーロード解決の向上
- 例外フィルター
- インデックス初期化子
- ラムダ式本体によるメンバーの記述
- 自動実装プロパティの機能強化
- using static
- Nameof 演算子
- 文字列補間
- Null 条件演算子
- パラメーターを持たない構造体
自動実装プロパティ
getterのみのプロパティを実装できるようになりました。
public int X { get; } public int Y { get; }
using static
using staticを使用するとメソッドの呼び出しを単純化することができます。
コード記述量を減らすことができます。
using static System.Console; using static System.Math; Console.WriteLine(Math.Sqrt(3*3+4*4)); WriteLine(Sqrt(3*3+4*4));
文字列補間
{0}や{1}のところに直接変数を指定することができるようになりました。
return String.Format("({0}, {1})",X,Y); return $"({X}, {Y})"
ラムダ式によるメソッド本体記述
従来の書き方
public override string ToString() { return $"({X}, {Y})"; }
書き換えると…
public override string ToString()=>$"({X}, {Y})";
ラムダ式によるプロパティの記述
従来の書き方
public double Dist { get { return Sqrt(X*X+Y*Y);} }
書き換えると…
public double Dist => Sqrt(X*X+Y*Y);
インデックス初期化子
従来の書き方
var numbers = new Dictionary{ {1, "one"}, {2, "two"}, {3, "three"} };
書き換えると…
var numbers = new Dictionary{ [1] = "one", [2] = "two", [3] = "three" };
Null条件演算子
nullチェックをするための演算子です。nullであればnullを入れて、nullじゃなければ値を入れる。
int? count = person?.Count();
nameof演算子
定義した変数の名前を返す場合の処理を効率化したものです。ArgumentNullExceptionに従来は文字列を指定していたが、それでは変数名をリファクタリングしたときに変更がもれることがあった。それを防ぐために変数名を返す演算子が追加された。
public Point Add(Point point) { if(point==null) { throw new ArgumentNullException(nameof(point)); } }