.NETの世界の皆さんの多くは、MicrosoftがVisual Studio 2017 RCをリリースしたのはごく最近(1か月前)であり、もちろんC#7が付属していることを知っているでしょう。 新しいバージョンの可能性を探る、Visual Studioは
突然クラッシュしました。 方法-カットの下で読んでください。
そのため、バグを再生するには
Visual Studio 2017 RCが必要です。 次に、コンソールアプリケーションを作成し、次の簡単なコードを挿入します。
class Program { class IwillCrash { public void Deconstruct(out int x) { x = 0; } } static void Main(string[] args) {
コードを理解していない人のために、その意味を理解しましょう。 ここでは、C#7の次のような革新が使用されています。
-タプル-タプル
-解体-および翻訳
たとえば、タプルは、言語の次の構文糖衣です。
以前は:
Tuple<int, string> MyFunc(Tuple<decimal, long> param)
次のことができます。
(int, string) MyFunc( (decimal, long) param )
この機能を使用するには、System.ValueTupleアセンブリをインストールする必要があることに注意してください。
インストールパッケージ "System.ValueTuple" -IncludePrerelease
解体、またはむしろ脱構築宣言または脱構築宣言-は、タプルを変数に解析し、同時に定義する機能です。
たとえば、次のように:
(string first, string middle, string last) = LookupName(id1);
メソッドが次のように宣言されている場合:
(string, string, string) LookupName(long id)
上記の構築の結果は、
LookupNameメソッドがタプルとして返す3つの新しい変数、first、middle、lastの宣言になります。 つまり、タプルは3つの変数に分割されます。
破壊的な宣言は、タプルだけでなく、カスタムクラスにも適用されます。 1つの条件は、Deconstructという名前のデコンストラクターメソッドの定義です。 上記の例のように。 この機能により、クラスオブジェクトをコンポーネント部分に分割できます。
例:
class Point { public void Deconstruct(out int x, out int y) { x = 1; y = 2; } } (var myX, var myY) = new Point(); // Deconstruct(out myX, out myY);
ご理解のとおり、結果として
myX = 1、myY = 2になります。
彼らはそれを理解したようです。 ここで一息ついて、投稿の冒頭にあるコードのコメントを外します。

焦点は成功でした-スタジオは姿を消し、テスターは解雇され、ダッシュボードの開発者チケットがさらに増えました。
公平に言えば、.NET Coreの場合、このコードは機能します。 たぶん、これはとても難しい考えですか?
レポートは投稿が表示される前にバグに送信されたため、リリースを修正する必要があります。
→
C#7の新機能の説明はこちらにあります。UPD:コメントのVarim
habrayuzerのリクエストで、MicrosoftがVisual Studioの既知のバグのリストを保持している場所を見つけました。 投稿で説明されているバグは
こちらです。