2017-04-04 13 views
2

私はここで何が欠けていますか?C#7パターンマッチングを使用しないでください

Visual Studioはインラインパターンマッチングを使用するように私に語ったと私のためのコードが再書き込みが、それがないとき、私はエラーを取得する:ここで

Severity Code Description Project File Line Suppression State Error CS8121 An expression of type TReturnState cannot be handled by a pattern of type LightState. DataModels C:\Users\Michael\Documents\windows\GCMS UWP\Models\Models\Elements\Lights\Light.cs 77 Active

は元のコードです:

public override void UpdateState<TReturnState>(TReturnState returnState) 
    { 
     var newState = returnState as LightState; 

     if (newState != null) 
      State = newState; 

     base.UpdateState(returnState); 
    } 

そして、VSが私のためにそれをやり直すときの様子はここにあります。

public override void UpdateState<TReturnState>(TReturnState returnState) 
    { 
     if (returnState is LightState newState) 
      State = newState; 

     base.UpdateState(returnState); 
    } 

調整された方法が好きですが、エラーが発生しています。私は何かを見逃しているのですか、これはバグですか?

パッケージ私が使用しています:7

@SirRufoが、C#での既知のバグのように見えるのコメントで指摘したように

"dependencies": { 
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.3.1", 
    "Newtonsoft.Json": "9.0.1", 
    "System.ValueTuple": "4.3.0" 
    }, 
+0

'State =(LightState)newState;' – Hogan

+1

@SirRufo「State」というグローバル変数を更新するのはどのように役に立たないのですか? – Hogan

+0

@Hoganオオプス、あなたは正しいです...:o) –

答えて

4

は修正がへのキャストでコードを書くことでしたオブジェクト。

public override void UpdateState<TReturnState>(TReturnState returnState) 
    { 
     if ((object)returnState is SpeakerState newState) 
      State = newState; 

     base.UpdateState(returnState); 
    } 

ただし、これは本当の修正ではなく、バグを乗り越えるためのハックです。 Visual Studioでは、このオブジェクトへのキャストは不要であり、それを修正しようとしますが、エラーが発生した場合はエラーを再度表示します。

これは、Visual Studioを介した完全なコードリファクタリングを弱めることになります。

Link to known issue posted by Sir Rufo.

編集:C#7.1の修正パターンは、匿名型を照合し、それがオーバーヘッドなしになっているように、それは今作品のためにボクシングのこの問題へのアップグレード。

+0

あなたのメソッドを使用しましたが、私のためには機能しませんでした。また、Visual Studioを15.3.5にアップデートしても動作しませんでした。 –

+0

@MohammadSadeghipour C#7.1へのアップグレード。これで、想定されているような匿名型と適切にパターンを一致させるようになりました。 –

+0

あなたの言ったことはしましたが、それでもまだ次のエラーで動作していません: エラーCS1617:/ langversionの無効なオプション '7.1'; ISO-1、ISO-2、デフォルトまたは範囲1〜6の整数でなければなりません。 –

関連する問題