C#6.0の新機能

画像



Microsoftは、開発者向けのVisual Studio 2015および.Net 4.6のプレビューバージョンをリリースしました。 新しいC#6.0には、コーディングを容易にするいくつかの新しい機能があります。



この記事では、C#6.0の新機能について説明します。 新しいVSはここからダウンロードできます。

Microsoft Visual Studio Ultimate 2015プレビュー



値を使用してプロパティを初期化する



C#6.0では、値を値の右側に書き込むことで、値でプロパティを初期化できます。 これにより、nullおよび空のプロパティ値によるエラーを回避できます。



前:



public int Id { get; set; } public string FirstName { get; set; }
      
      





今:



 public int Id { get; set; } = 1001; public string FirstName { get; set; } = "Srinivas";
      
      





文字列補間



毎日、文字列の連結に対処する必要があります。 主に「+」演算子を使用する人もいれば、string.Format()メソッドを使用する人もいます。 個人的にはstring.Format()が好きです。 しかし、誰もがそれに関する問題を知っています。パラメーターが多すぎると、各数字の意味を理解するのが難しくなります-{1}、{2}、{3}。 C#6.0は、両方の方法の長所を組み合わせた新しい機能を考案しました。



前:



 name = string.Format("Employee name is {0}, located at {1}", emp.FirstName, emp.Location);
      
      





今:



 name = $"Employee name is {emp.FirstName}, located at {emp.Location}";
      
      







労働者のILコードの要求に応じて



 IL_0000: nop IL_0001: ldstr "Ivan" IL_0006: stloc.0 IL_0007: ldstr "Moscow" IL_000c: stloc.1 IL_000d: ldstr "Employee name is {0}, located at {1}" IL_0012: ldloc.0 IL_0013: ldloc.1 IL_0014: call string [mscorlib]System.String::Format(string, object, object) IL_0019: stloc.2 IL_001a: ret
      
      





条件も使用できます。

 name = $"Employee name is {emp.FirstName}, located at {emp.Location}. Age of employee is {(emp.Age > 0) ? emp.Age.ToString() : "N/A"}";
      
      







ラムダ式を使用する



C#6.0では、ラムダ式を使用してプロパティとメソッドを定義できます。 これにより、コードの量が大幅に削減されます。



前:



 public string[] GetCountryList() { return new string[] { "Russia", "USA", "UK" }; }
      
      





今:



 public string[] GetCountryList() => new string[] { "Russia", "USA", "UK" };
      
      







静的クラスをインポートする



クラスのすべての静的メンバーは、別の静的クラスを使用して定義できます。 しかし、この静的クラスの名前を常に繰り返す必要があります。 多数のプロパティを使用すると、同じことを何度も繰り返す必要があります。

C#6.0では、静的クラスを使用してキーワードを使用してインポートする機能が導入されました。 数学ライブラリの使用例を見てみましょう。



以前は



 double powerValue = Math.Pow(2, 3); double roundedValue = Math.Round(10.6);
      
      





今:



 using System.Math; double powerValue = Pow(2, 3); double roundedValue = Round(10.6);
      
      





これはクラス内だけでなく、メソッドの実行時にも使用できます。



前:



 var employees = listEmployees.Where(i => i.Location == "Bangalore");
      
      





今:



 using System.Linq.Enumerable; var employees = Where(listEmployees, i => i.Location == "Bangalore");
      
      







ヌル条件ステートメント



C#6.0では、いわゆるヌル条件演算子(?。)が導入されました。これは、条件演算子(?:)の上で機能します。 その目的は、NULL値のチェックを容易にすることです。

演算子が適用されるクラスオブジェクトがnullの場合、null値を返します。

 var emp = new Employee() { Id = 1, Age = 30, Location = "Bangalore", Department = new Department() { Id = 1, Name = "IT" } };
      
      







前:



 string location = emp == null ? null : emp.Location; string departmentName = emp == null ? null : emp.Department == null ? null : emp.Department.Name;
      
      





今:



 string location = emp?.Location; string departmentName = emp?.Department?.Name;
      
      







nameof演算子



C#6.0では、nameof演算子を使用して、コード内の文字列プロパティリテラルの出現を回避します。 この演算子は、渡された要素の文字列リテラルを返します。 クラスの任意のメンバーまたはクラス自体をパラメーターとして渡すことができます。

 var emp = new Employee() { Id = 1, Age = 30, Location = "Moscow", Department = new Department() { Id = 1, Name = "IT" } }; Response.Write(emp.Location); //result: Moscow Response.Write(nameof(Employee.Location)); //result: Location
      
      







キャッチで待ち、最後にブロックする



C#6.0より前は、catchおよびfinalブロックでawait演算子を使用できませんでした。 今、そのような機会が現れました。 リソースを解放したり、エラーログを保持したりするために使用できます。

 public async Task StartAnalyzingData() { try { //  } catch { await LogExceptionDetailsAsync(); } finally { await CloseResourcesAsync(); } }
      
      







例外フィルター



例外フィルターはCLRにあり、VBで使用可能ですが、C#では使用できませんでした。 これでこの機能が登場し、例外に追加のフィルターを課すことができます:

 try { //  } catch (ArgumentNullException ex) if (ex.Source == "EmployeeCreation") { //   } catch (InvalidOperationException ex) if (ex.InnerException != null) { //   } catch (Exception ex) if (ex.InnerException != null) { //    }
      
      







辞書の初期化



C#6.0は、値キーによって辞書を初期化する機能を追加しました。 これにより、辞書の初期化が簡単になります。

たとえば、JSONオブジェクトの場合:

 var country = new Dictionary<int, string> { [0] = "Russia", [1] = "USA", [2] = "UK", [3] = "Japan" };
      
      





C#6.0には、多くの構文変更と新機能があります。 マイクロソフトは、パフォーマンスの面でも新しいコンパイラを改善しています。



PS新機能は、コンパイラの現在のバージョンで説明されていますが、最終バージョンのリリースによって構文が変更される場合があります。



All Articles