2016-10-05 14 views
0

私は私のプロジェクトの一部として次のコードを持っています。そこには、この交換の目的のためにコメントアウトできる他のコードがあります。あいまいなエラー "; expected" "予期しない宣言の終わり"

namespace Project.HttpHandlers 
{ 
    public class Web : IHttpHandler 
    { 
     /// <summary> 
     /// Gets a value indicating whether another request can use the 
     /// <see cref="T:System.Web.IHttpHandler"/> instance. 
     /// </summary> 
     /// <returns> 
     /// true if the <see cref="T:System.Web.IHttpHandler"/> instance 
     /// is reusable; otherwise, false. 
     /// </returns> 
     public bool IsReusable => false; 
    } 
} 

Visual Studioは、 "public bool IsReusable => false;"にエラーを投げます。それが "期待される"と書かれた行。

=>演算子でのインテリセンスエラーを強調表示すると、「予期しない宣言」が表示されます。

「public bool IsReusable = false;」に変更するとエラーは消え去る。私はこのラインの機能とそこにラムダ演算子がある理由を完全には知りませんので、私はそれをしたくありません。私はそれが同僚のマシン上でコンパイル可能であることを知っています、そして、私はそれをWeb上の他の場所で参照しています。

Visual Studioでリファレンスなどが見つからないようですが、見つけられません。

+3

iisインスタンスがC#6をサポートしていますか?私はそれを自分で使ったことはありませんが、これらの機能を利用するには[asp.net core](https://docs.asp.net/en/latest/intro.html)を使う必要があると思います。 –

+0

@ScottChamberlain C#6はコンパイラなので、VSのバージョンではないでしょうか。 – juharr

+0

VS 2013で新しい構文を使用しようとすると同じエラーが表示されるので、コンパイラまたはIDEがC#6をサポートしていないようです。 – Dirk

答えて

1

あなたの同僚はVisual Studio 2015を使用しており、Visual Studio 2013以前を使用してプロジェクトをコンパイルしているようです。

あなたは副作用なし

public bool IsReusable { get { return false; } } 

でラムダ式を置き換えることができ、あなたのVSのバージョンをアップグレードしたくない場合。

+0

これは本当です。彼は2015年のコミュニティバージョンを使用しており、プロ2013を使用しています。ありがとうございます。 – Keith

+0

@Keith - ようこそ。 :-) – haindl

1

これはexpression bodied membersのC#6の構文です。

構文< C#6:

private readonly bool _isReusable = false; 
public bool IsReusable 
{ 
    get {return _isReusable; } 
} 

EDIT:スコット・チェンバレンでコメントして修正。

+3

OPのコードは合法的なC#6です。 –

+0

私は合法ではないとは言いませんでした。しかし、それは構築されません。したがって、ビルド中にC#6は使用されていませんでした。これで修正されます。 –

+0

よく 'bool IsReusable = false;'は 'public bool IsReusable => false;と同じ振る舞いをしません、' private readonly bool _isReusable = false;を実行する必要があります。パブリックbool IsReusable {get {return _isReusable; }} ' –

1

この行は常にfalseを返すプロパティを定義しています。機能的にはpublic bool IsReusable {get {return false;} }と同等です。

プロパティまたはメソッドを定義するときにそれを使用することは、expression-bodied memberと呼ばれます。 C#6.0の新機能なので、6.0をターゲットにしていることを確認する必要があります。そうしないと、コンパイルされません。 VS2015のデフォルトは6.0ですが、2013年に使用するにはinstall it separatelyが必要です。あなたの同僚はすでにこれを行っているか、VS2015を使用しています。

関連する問題