2017-05-21 5 views
2

私はC#7を楽にしていますが、最初のスロー式はコンパイルされません。これには何が問題なのですか?スロー式でイベントをアタッチする

view.SelectionChanged += 
    something == true 
     ? OnSelectionChanged 
     : throw new InvalidOperationException(); 

コンパイラエラーがある:「メソッドグループ」との間に暗黙の変換が存在しないための条件式の

タイプを決定することができず、 '

+1

これはラムダではありません。 – SLaks

+0

プロジェクトのコンパイルをC#7でコンパイルするように設定しましたか? –

+0

@ S.Petrosov何を意味するのか分かりません。 VS 2017を使用しています。 – HappyNomad

答えて

1

へ>言語バージョンセットこれは動作しません。指定された。 OnActionがメソッドグループとして使用されます。 OnActionの種類が「メソッド・グループ」で、潜在的にので、コンパイラはそれを推測することはできませんOnActionの複数のオーバーロードがあるかもしれません:

public void M() 
{ 
    var item = Console.Read(); 
    Func<object, object> ok = OnAction; // will work 
    Func<object, object> handler = 
     item == 1 ? OnAction : throw new Exception(); // will not work 
} 

public static Object OnAction(object y) 
{ 
    return ""; 
} 

はそれを修正するために、私たちが行う必要があるのはとてもメソッドグループの署名を指定しています

Func<object, object> handler = 
    item == 1 ? (Func<object, object>)OnAction : throw new Exception(); 

は、だからあなたの問題を解決するために、私はSelectionChangedが何であるかわからないが、あなたはその署名を提供する必要があり、それは問題を修正します:コンパイラは、正確にどの1知っています。

このエラーはC#7.0に固有ではありません。 の後ろのバージョンでも、式が同じエラーを生成します。

<== Fiddle Me ==>

0

throw new InvalidOperationException()を置き換え
(sender,args)=>{throw new InvalidOperationException()} 

またはc#7で建物をオンにするこのように:プロジェクトのプロパティに ゴー - >高度 - - >ビルド方法グループの署名がないため、C#7.0 enter image description here

+0

これは、コードの意味を誤った動作に変更します。 – HappyNomad

+1

プロジェクトはすでにVS 2017でC#7である 'default'に設定されています。 – HappyNomad

+0

@HappyNomadはデフォルトがC#7ではないと知っています。 –

関連する問題