Новое выражение требует () или [] после ошибки компиляции типа - C # - PullRequest
5 голосов
/ 23 декабря 2008

Следующий код для сотрудника выдает следующую ошибку, когда он пытается скомпилировать его с использованием VS 2008:

Ошибка:

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

Код:

Структура MyClass:

public class MyClass
{
    public MyClass() {}

    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

Пример исходного кода:

List<MyClass> x = new List<MyClass>();

x.Add(new MyClass 
{
    Property1 = "MyValue",
    Property2 = "Another Value"
});

Он "работает на моей машине", но не на его. Есть идеи почему?

ОБНОВЛЕНИЕ
Он нацелен на 3.5 .NET Framework
Он использует пространство имен System.Collections.Generics
У объекта MyClass есть конструктор

ОБНОВЛЕНИЕ 1:
@ Funky81 - Ваш пример и мой пример смогли скомпилироваться на моем ПК.

Обновление 2:
Включенная схема MyClass в образце

ОБНОВЛЕНИЕ 3:
@DK - мой коллега добавил следующий раздел конфигурации в свое приложение:

<system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
            <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="OptionInfer" value="true"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>

И он получил следующую ошибку компиляции: Нераспознанный элемент 'providerOption'.

Ответы [ 8 ]

7 голосов
/ 23 декабря 2008

Вот что похоже на единственную похожую, но не совсем ту же ошибку в VS.2008:

Ошибка компилятора CS1526: новый выражение требует (), [] или {} после типа

Обратите внимание на те {} в сообщении об ошибке, которые являются частью синтаксиса c # 3.0. Это связано не с версией фреймворка, а с версией языка.

Могу поспорить, что каким-то образом использовалась другая версия компилятора.

Добавлено: это похоже на вероятную проблему с ASP.Net. Место для проверки находится в файле (файлах) .config, элемент

configuration\system.codedom\compilers\compiler @language="c#..."

должно быть

<providerOption name="CompilerVersion" value="v3.5"/>
4 голосов
/ 23 декабря 2008

Это дает мне плохое сообщение компиляции на моем ПК

Попробуйте это

x.Add(new MyClass()
{
    Property1 = "MyValue",
    Property2 = "Another Value"
});

Обратите внимание, есть еще одна скобка после создания класса MyClass.

3 голосов
/ 23 декабря 2008

Его проект нацелен на .NET 3.5? Если нет, эта ошибка будет выдана в строке x.Add (new MyClass, поскольку в новом классе не указан конструктор или индексатор.

2 голосов
/ 23 декабря 2008

Вы оба на одном уровне пакета обновления .NET? Сегодня меня укусили, потому что одна машина была .NET 3.5 RTM, а другая - .NET 3.5 SP1. В .NET 3.5 SP1 (который также устанавливает .NET 2.0 SP2) они ввели новую перегрузку для метода System.Web.Caching.Cache.Insert, которую я использовал в своем устройстве dev, а затем отправили по почте в промежуточной среде предварительной сборки: 1001 *

public void Insert(
    string key,
    Object value,
    CacheDependency dependencies,
    DateTime absoluteExpiration,
    TimeSpan slidingExpiration,
    CacheItemUpdateCallback onUpdateCallback
)

Мне потребовалось несколько минут на тренировку, почему это было сломано на одной машине, а не на другой ...

Обновление: сообщение об ошибке 'Новое выражение требует () или [] после типа ', часто означающее, что вы пропустили скобки конструктора. Вы уверены, что не пропустили () из строки:

List<MyClass> x = new List<MyClass>();

Или где-то рядом?

Обновление снова : Я построил следующее:

using System;
using System.Collections.Generic;

namespace Test
{
    public class MyClass
    {
        public MyClass() { }

        public string Property1 { get; set; }
        public string Property2 { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<MyClass> x = new List<MyClass>();
            x.Add(new MyClass
            {
                Property1 = "Kev",
                Property2 = "Kev 2"
            });
        }
    }
}

VS2008 SP1 Targetting 3.5 - Компилируется нормально
VS2008 SP1 Targetting 3.0 - компилируется нормально
VS2008 SP1 Targetting 2.0 - компилируется нормально

VS2008 RTM - Targetting 3.5 - Компилируется нормально
VS2008 RTM - Targetting 3.0 - компилируется нормально
VS2008 RTM - Targetting 2.0 - компилируется нормально

VS2005 - 8.0.50727.867 (на машине с VS2008 / 3.5 SP1) - Сбой:

Новое выражение требует () или [] после типа «Test.MyClass.Property1.get» должен объявлять тело, поскольку оно не помечено как абстрактное или внешнее
«Test.MyClass.Property1.set» должен объявлять тело, поскольку оно не помечено как абстрактное или внешнее
«Test.MyClass.Property2.get» должен объявлять тело, поскольку оно не помечено как абстрактное или внешнее
«Test.MyClass.Property2.set» должен объявлять тело, поскольку оно не помечено как абстрактное или внешнее

VS2005 - 8.0.50727.762 (на машине с VS2008 / 3.5 RTM) - Сбой:

Новое выражение требует () или [] после типа «Test.MyClass.Property1.get» должен объявлять тело, поскольку оно не помечено как абстрактное или внешнее
«Test.MyClass.Property1.set» должен объявлять тело, поскольку оно не помечено как абстрактное или внешнее
«Test.MyClass.Property2.get» должен объявлять тело, поскольку оно не помечено как абстрактное или внешнее
«Test.MyClass.Property2.set» должен объявлять тело, поскольку оно не помечено как абстрактное или внешнее

Я склонен думать, что проблема не в коде, который вы представляете, если только на снимке экрана не приведен пример ошибки компиляции с использованием приведенного выше кода или аналогичного. Есть ли шанс свести все к чему-то простому, чтобы уничтожить красную сельдь?

Приветствия
Кев

2 голосов
/ 23 декабря 2008

Вы уверены, что используете точно такой же код?

Код, который вы указали, не компилируется, потому что в нем отсутствует объявление MyClass. Пожалуйста, предоставьте нам полный сборник, а не просто фрагмент кода. Затем отправьте этот файл своему другу, чтобы убедиться, что вы по-прежнему видите другое поведение на вашем компьютере.

Сообщение об ошибке указывает на строку и столбец, верно? Скажите нам, где.

1 голос
/ 23 декабря 2008

Ваш код работает для меня безупречно. Вы уверены, что проект компилируется в платформу 3.5? Выберите свойства проекта в меню «Проект», перейдите на вкладку «Приложение» и посмотрите на выпадающий список Target Framework.

0 голосов
/ 24 декабря 2008

Добавьте "()" после нового MyClass в примере кода или удалите пустой конструктор из MyClass.

0 голосов
/ 23 декабря 2008

он использует System.Collections.Generic?

...