Инициализаторы объектов в C # вызывают ошибку во время компиляции - PullRequest
4 голосов
/ 15 декабря 2011

При компиляции кода C # я получаю сообщение об ошибке:

Для нового выражения требуется () или [] после типа

Мой код выглядит следующим образом:

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

Я работаю с ASP.NET 2.0.

Можете ли вы помочь объяснить, почему возникает эта ошибка?

Ответы [ 3 ]

6 голосов
/ 15 декабря 2011

Вы не можете использовать инициализаторы объектов (new T { Property = value }), если вы не пишете для C # 3.0 или выше.

К сожалению, для pre-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 все новые функции языка и фреймворка были фактически просто управляемыми библиотеками, которые располагались поверх версии 2.0 CLR.Это означает, что если вы загрузите компилятор C # 3.0+ (как часть более поздней среды), вы можете скомпилировать свой код для этого компилятора.(Это не тривиально в среде ASP.NET.)

4 голосов
/ 15 декабря 2011

Возможно, вы скопировали этот код из другого источника? Похоже, вы пытаетесь использовать образец C # 3.0 (или выше) (с «инициализатором объекта») в C # 2.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);
0 голосов
/ 15 декабря 2011

просто делай то, что говорит

request.AddExtension(new ClaimsRequest() {

если у вас есть ключевое слово new, вам нужно запустить конструктор ().

...