rksoftware

Visual Studio とか C# とかが好きです

C# 7・8 の復習その1

皆さん C# 書いてますか? 私はあまり書けていません。
特に、C# 7 以降は地味に書けない環境だったり、C# 8 などは (一部対応している仕様もありますが) .NET Framework で書けなかったり、何気に使えないことも多いのでなおさらです。

■ 復習しよう

というわけでここらで一回復習してみます。
今日のところはまず、自分用に公式ドキュメントへのリンクをメモしておきます。

公式のドキュメントはこちら

■ C# 7 の新機能リスト

out 変数 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#out-variables
タプル https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#tuples
破棄 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#discards
パターン一致 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#pattern-matching
ref ローカル変数と戻り値 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#ref-locals-and-returns
ローカル関数 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#local-functions
式形式のメンバーの追加 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#more-expression-bodied-members
throw 式 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#throw-expressions
一般化された async の戻り値の型 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#generalized-async-return-types
数値リテラルの構文の改善 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7#numeric-literal-syntax-improvements

■ C# 7.1 の新機能リスト

async Mainメソッド https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-1#async-main
default リテラル式 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-1#default-literal-expressions
推論されたタプル要素の名前 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-1#inferred-tuple-element-names
ジェネリック型パラメーターのパターン マッチ https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-1#pattern-matching-on-generic-type-parameters

■ C# 7.2 の新機能リスト

安全で効率的なコードを記述するための手法 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-2#safe-efficient-code-enhancements
末尾以外の名前付き引数 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-2#non-trailing-named-arguments
数値リテラルでの先頭のアンダースコア (_) https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-2#leading-underscores-in-numeric-literals
private protected アクセス修飾子 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-2#private-protected-access-modifier
条件付きの ref 式 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-2#conditional-ref-expressions

■ C# 7.3 の新機能リスト

ピン留めを使用せずに fixed フィールドにアクセスできます。 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3#indexing-fixed-fields-does-not-require-pinning
ref ローカル変数を再割り当てできます。 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3#ref-local-variables-may-be-reassigned
stackalloc 配列で初期化子を使用できます。 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3#stackalloc-arrays-support-initializers
パターンをサポートする型と共に fixed ステートメントを使用できます。 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3#more-types-support-the-fixed-statement
追加のジェネリック制約を使用できます。 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3#enhanced-generic-constraints
タプル型を使用して == と != をテストできます。 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3#tuples-support--and-
式の変数をより多くの場所で使用できます。
自動実装プロパティのバッキング フィールドに属性をアタッチできます。 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3#attach-attributes-to-the-backing-fields-for-auto-implemented-properties
引数が in によって異なる場合のメソッド解決が改善されました。 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3#in-method-overload-resolution-tiebreaker
オーバーロードの解決のあいまいなケースが削減されました。 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-7-3#improved-overload-candidates

■ C# 8 の新機能リスト

読み取り専用メンバー https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#readonly-members
既定のインターフェイス メソッド https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#default-interface-methods
パターン マッチングの拡張機能 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#more-patterns-in-more-places
- switch 式 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#switch-expressions
- プロパティのパターン https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#property-patterns
- タプル パターン https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#tuple-patterns
- 位置指定パターン https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#positional-patterns
using 宣言 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#using-declarations
静的ローカル関数 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#static-local-functions
破棄可能な ref 構造体 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#disposable-ref-structs
Null 許容参照型 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#nullable-reference-types
非同期ストリーム https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#asynchronous-streams
非同期の破棄可能 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#asynchronous-disposable
インデックスと範囲 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#indices-and-ranges
null 合体割り当て https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#null-coalescing-assignment
構築されたアンマネージド型 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#unmanaged-constructed-types
入れ子になった式の stackalloc https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#stackalloc-in-nested-expressions
verbatim 補間文字列の拡張 https://docs.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-8#enhancement-of-interpolated-verbatim-strings