4

いくつかのC#コードをコンパイルすると、次のエラーが発生します。

新しい式には、型の後に()または[]が必要です

私のコードは次のとおりです。

request.AddExtension(new ClaimsRequest {
        Country = DemandLevel.Request,
        Email = DemandLevel.Request,
        Gender = DemandLevel.Require,
        PostalCode = DemandLevel.Require,
        TimeZone = DemandLevel.Require,
});

ASP.NET2.0を使用しています。

このエラーが発生する理由を説明できますか?

4

3 に答える 3

6

C# 3.0 以降で記述している場合を除き、オブジェクト初期化子( )は使用できません。new T { Property = value }

残念ながら、C# 3.0 より前のバージョンでは、次のことを行う必要があります。

ClaimsRequest cr = new ClaimsRequest();
cr.Country = DemandLevel.Request;
cr.Email = DemandLevel.Request;
cr.Gender = DemandLevel.Require;
cr.PostalCode = DemandLevel.Require;
cr.TimeZone = DemandLevel.Require;
request.AddExtension(cr);

ここでオブジェクト初期化子についてもう少し詳しく説明します。

使用している C# のバージョンを確認する最も簡単な方法は、使用している Visual Studio のバージョンを確認することです。C# 3.0 は、Visual Studio 2008 にバンドルされています。

しかし、あなたには「抜け道」があります。.NET 4.0 より前、.NET 2.0 以降では、すべての新しい言語とフレームワークの機能は、実際には、CLR のバージョン 2.0 の上にあるマネージ ライブラリにすぎませんでした。これは、C# 3.0+ コンパイラを (新しいフレームワークの一部として) ダウンロードすると、そのコンパイラに対してコードをコンパイルできることを意味します。(これは、ASP.NET 環境では簡単なことではありません。)

于 2011-12-15T13:42:04.600 に答える
4

そのコードを別のソースからコピーしたのではないでしょうか? C# 2.0 で C# 3.0 (またはそれ以降) のサンプル (「オブジェクト初期化子」を使用) を使用しようとしているようです。

C# 2.0 以下では、以下が必要です。

ClaimsRequest req = new ClaimsRequest();
req.Country = DemandLevel.Request;
req.Email = DemandLevel.Request;
req.Gender = DemandLevel.Require;
req.PostalCode = DemandLevel.Require;
req.TimeZone = DemandLevel.Require;
request.AddExtension(req);
于 2011-12-15T13:41:23.260 に答える
-2

言われたことをするだけ

request.AddExtension(new ClaimsRequest() {

キーワードがある場合はnew、コンストラクターを実行する必要があります()

于 2011-12-15T13:41:38.500 に答える