2016-09-01 6 views
3

私はEnterprise 2015 Previewをダウンロードしました。3. C#7でこのプログラムを動作させるにはどうすればいいですか?新しいマッチ機能

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

abstract class Animal { } 
class Dog : Animal 
{ 
    public string BarkLikeCrazy() 
    { 
     return "WOOF WOOF WOOF"; 
    } 
} 

class Cat : Animal { } 
class Swan : Animal { } 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var animals = new Animal[] { new Dog(), new Cat(), new Swan() }; 

     var organizedAnimals = from animal in animals 
           let sound = animal match(
            case Dog d: "woof... " + d.BarkLikeCrazy() 
            case Cat c: "meow" 
            case * : "I'm mute.." 
          ) 
           select new { Type = animal, Sound = sound }; 

     foreach (var animal in organizedAnimals) 
     { 
      Console.WriteLine($"{animal.Type.ToString()} - {animal.Sound}"); 
     } 

     Console.ReadKey(); 
    } 
} 
+0

を話していますか?またはVS 2015 Update 3?混乱しますが、その2つは完全に別です。また、私は 'マッチ 'がC#7.0になるとは思わない。 – svick

+0

これは、ヘルプの一部であることを示します。Microsoft Visual Studioのエンタープライズ15のプレビュー3 バージョン15.0.25428.1 PREVIEW Microsoft .NET Frameworkのバージョン4.6.01055 インストールされたバージョン:エンタープライズ アーキテクチャおよびモデリングツールを00369-50000-00000- AA450 マイクロソフトアーキテクチャおよびモデリングツール のVisual C#15プレビュー3 00369-50000-00000-AA450 のMicrosoft Visual C#15プレビュー3 のVisual C++ 15のプレビュー3 00369-50000-00000-AA450 のMicrosoft Visual C++ 15のプレビュー3 – Ivan

+0

マッチでそれができなければ、残念です。それは何年もF#にあった。 – Ivan

答えて

1

switchにごmatchキーワードを変更

var organizedAnimals = from animal in animals 
         let sound = animal switch(
          case Dog d: "woof... " + d.BarkLikeCrazy() 
          case Cat c: "meow" 
          case * : "I'm mute.." 
        ) 
         select new { Type = animal, Sound = sound }; 

あなたはdiscussion on GitHub(前パターンマッチングの仕様にマージされるまで)で、このの進化について読むことができます。

はここGitHub feature discussionから、それの例です:

var areas = 
    from primitive in primitives 
    let area = primitive switch (
     case Line l: 0, 
     case Rectangle r: r.Width * r.Height, 
     case Circle c: Math.PI * c.Radius * c.Radius, 
     case *: throw new ApplicationException() 
    ) 
    select new { Primitive = primitive, Area = area }; 
+0

私はすべての種類のエラーを取得します。最初の一致は "クエリ本体はselect句またはgroup句で終了する必要があります"。プロジェクトのために定義されている__DEMO __、__DEMO_EXPERIMENTAL__(underscoreunderscore)があります。 – Ivan

+0

私もRoslynにリンクしていることに気付きました。 Roslynの関係が2015年のエンタープライズプレビュー3. – Ivan

+0

であるかどうかわからないC#7の新しい機能を探しています - RoslynはC#コンパイラです。あなたのプロジェクトでC#7の機能を使用する手順を踏む必要があるように思えます。参照:http://www.strathweb.com/2016/03/enabling-c-7-features-in-visual-studio-15-preview/ –

0

私はC#7の下で、このプログラムを動作させるにはどうすればよいですか?

あなたはありません。式ベースのパターンマッチングは、C#7.0の現在のプレビューでは利用できず、最終バージョンのC#7.0では計画されていません。

The form that's currently planned for "C# 7.0 + 1"

は、次のようになります。あなたが "15" のプレビュー3 VSについて

var organizedAnimals = from animal in animals 
         let sound = animal switch (
          case Dog d: "woof... " + d.BarkLikeCrazy(), 
          case Cat c: "meow", 
          case *: "I'm mute.." 
         ) 
         select new { Type = animal, Sound = sound }; 
+0

最新のC#プレビュー(17?)に更新しましたが、これはまだ動作しません。 – Ivan

+0

@Ivan VS 2017 RCにはまだC#7.0のみが含まれています。現在のところ、このバージョンが動作するVSまたはC#コンパイラのバージョンはありません。 – svick

関連する問題