web-dev-qa-db-ja.com

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

C#7を実行するための最小の.NETフレームワークとCLRバージョンの要件は何ですか?また、C#7をコンパイルするにはVS 2017が必要ですか?

46
ilias

.NET 4.6以降をターゲットにする必要はありませんが、これは誤りです。タプルを使用するには、System.ValueTuple NuGetパッケージが必要です。 https://www.nuget.org/packages/System.ValueTuple/ では、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のすべての機能をテストしたわけではありませんが、一般に、Tuples(およびそれらに関連する分解のような機能)を除いて、.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)
  • REFリターン
  • 式を投げる
  • 表現型のゲッターとセッター
  • 式本体のコンストラクターとファイナライザー
98
dmeglio

C#7のフルパワーをそのまま使用するには(NuGetパッケージなどを参照せずに)ターゲットフレームワークとしてVS 2017と.NET 4.7が必要です。

3
SerG