C# 7 .NET / CLR / Visual Studio のバージョン要件 質問する

C# 7 .NET / CLR / Visual Studio のバージョン要件 質問する

C# 7 を実行するための .NET Framework および CLR バージョンの最小要件は何ですか? また、C# 7 をコンパイルするには VS 2017 が必要ですか?

ベストアンサー1

.NET 4.6以上をターゲットにする必要はありません。これは間違いです。タプルを使用するには、System.ValueTuple NuGetパッケージが必要です。その通りです。詳しくはこちら4.5 以上をサポートしていると書いてありますが、実際は 4.0 以上をサポートしています。また、System.ValueTupleこのパッケージと同じ機能を持つ独自のクラスを作成すれば、.NET 3.5 やおそらくそれ以前のバージョンでも動作します。「タスクのような」タイプには、NuGet パッケージも必要です。詳しくは、https://www.nuget.org/packages/System.Threading.Tasks.Extensions/ をご覧ください。このパッケージは、ドキュメントによると、.NET 4.5 以降でも動作します。

その他の C# 7 機能は単なる構文上の糖衣なので、.NET 2 以上で動作します。たとえば、.NET 2.0 で次のように記述したところ、正しく次のエラーがスローされました。

static void Main(string[] args)
{
    string test = null;
    string d = test ?? throw new ApplicationException("test");
}

同様に、int.TryParse("123", out int i);.NET 2.0 でも問題なく動作します。

C#7 のすべての機能をテストしたわけではありませんが、一般的に、タプル (および分解などの関連機能) を除いて、そのほとんどは単なる構文糖なので、.NET 2.0 以降で動作するはずです。そうは言っても、C#7 をコンパイルするには VS2017 が必要です。他のコンパイラーがいつか C#7 をサポートするようになることは間違いありませんが、現時点ではそうではありません。

.NET 2.0 で動作することが確認された機能:

  • バイナリリテラル
  • 桁区切り
  • インラインoutパラメータ
  • _パラメータを破棄するために使用
  • ローカル関数
  • 型ベースのパターンマッチングif (obj is int i)case int i:
  • 定数パターンマッチングif (i is 2)
  • Varパターンマッチングif (i is var j)
  • 参照リターン
  • スロー式
  • 式本体のゲッターとセッター
  • 式本体のコンストラクタとファイナライザ

おすすめ記事