C#6
自動実装プロパティ用の初期化子
public string First { get; set; } = "Taro";自動実装プロパティに初期化子をつけることができるようになりました。
これができるようになったのは Unity2017 からだったと思います。
これだけでUnity2017にする価値があったといえる機能です。懐かしい。
ラムダ式本体によるメソッドの記述
public double Distance(Vector2 p) => Mathf.Sqrt((p.x - 1) * (p.x - 1) + (p.y - 1) * (p.y - 1));簡単な関数ならラムダ式(なんかこんな=>やつ)であっさり書くことができました。
ラムダ式本体によるプロパティの記述
public double FirstLength => First.Length;プロパティもラムダ式でできます。
Null条件演算子
List<vector2> point = null;"??"演算子は、ヌルだった場合に実行させることができます。
Vector2? first = point?[0];
second = first ?? Vector2.zero;
Debug.Log($"{second}");
// (0.0, 0.0)
この場合、firstがnullだとVector2.zeroを、nullじゃなければfirstがそのままsecondに代入されます。
文字列補間
Debug.Log($"Coin flip: {(Random.value < 0.5f ? "heads" : "tails")}"); // Coin flip: tails
文字列の前に"$"を付けることで"{}"中に直接、変数なんかを記述することができます。
この例だと実行するたびに結果が変わる可能性があります。
$"{Month}月{Day}日"なんかで利用すると便利です。
nameof演算子
Debug.Log(nameof(First));変数名が文字列になります。デバッグやツール用に使えそうです。
// First
例外フィルター
catch (System.Net.WebException e) when (e.Status == System.Net.WebExceptionStatus.NameResolutionFailure)例外を利用するときに、さらに分類することができます。
finallyブロック内でのawait
catchやfinallayなんかでもawaitができるようになったみたいです。#if UNITY_EDITOR | |
using System.Collections.Generic; | |
using UnityEngine; | |
public class CS6Test : MonoBehaviour | |
{ | |
#region 自動実装プロパティ用の初期化子 | |
public string First { get; set; } = "Taro"; | |
public string Last { get; } = "Tanaka"; | |
#endregion | |
#region ラムダ式本体によるメソッドの記述 | |
public double Distance(Vector2 p) => Mathf.Sqrt((p.x - 1) * (p.x - 1) + (p.y - 1) * (p.y - 1)); | |
#endregion | |
#region ラムダ式本体によるプロパティの記述 | |
public double FirstLength => First.Length; | |
#endregion | |
void Start() | |
{ | |
#region Null条件演算子 | |
List<Vector2> point = null; | |
Vector2? first = point?[0]; | |
// デフォルト値をNull合体演算子(??)で記述できる | |
Vector2 second = first ?? Vector2.zero; | |
Debug.Log($"{second}"); | |
// (0.0, 0.0) | |
#endregion | |
#region 文字列補間 | |
Debug.Log($"Item name is {First,20} {{-}}"); | |
// Item name is Taro {-} | |
Debug.Log($"Coin flip: {(Random.value < 0.5f ? "heads" : "tails")}"); | |
// Coin flip: tails | |
#endregion | |
#region nameof演算子 | |
Debug.Log(nameof(First)); | |
// First | |
#endregion | |
} | |
#region 例外フィルター | |
public static void Execute() | |
{ | |
try | |
{ | |
Debug.Log("DoSomeHttpRequest();"); | |
} | |
catch (System.Net.WebException e) when (e.Status == System.Net.WebExceptionStatus.NameResolutionFailure) | |
{ | |
Debug.Log("名前解決できませんでした"); | |
} | |
catch (System.Net.WebException e) when (e.Status == System.Net.WebExceptionStatus.RequestCanceled) | |
{ | |
Debug.Log("リクエストがキャンセルされました"); | |
} | |
catch | |
{ | |
Debug.Log("その他のエラー"); | |
} | |
} | |
#endregion | |
#region MyRegion | |
public async void Sync() | |
{ | |
await new System.Threading.Tasks.Task(() => { }); | |
#region およびfinallyブロック内でのawait | |
//var req = new MyRequest(); | |
//try | |
//{ | |
// var res = await req.SendAsync(); // 非同期メソッド | |
//} | |
//catch (Exception e) | |
//{ | |
// await req.RetryAsync(); | |
//} | |
//finally | |
//{ | |
// if (req != null) await req.CloseAsync(); | |
//} | |
#endregion | |
} | |
#endregion | |
} | |
#endif |
C#6ではUnityでも実用的なものが実装されました。
とっても便利です。
次は最後、本命のC#7へ
CITY 8巻
僕のヒーローアカデミア 24巻
メイドインアビス(8)
ハクメイとミコチ 7巻
0 件のコメント :
コメントを投稿