在类型编译错误后,新表达式需要()或 – C#

以下代码的同事在尝试使用VS 2008编译时会抛出以下错误:

错误:

新表达式在类型后需要()或[]

码:

MyClass结构:

public class MyClass { public MyClass() {} public string Property1 { get; set; } public string Property2 { get; set; } } 

示例源代码:

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

它“在我的机器上工作”,但不是他的。 知道为什么吗?

UPDATE
他的目标是3.5 .NET框架
他正在使用System.Collections.Generics命名空间
MyClass对象确实有一个构造函数

更新1:
@ Funky81 – 你的例子和我的例子能够在我的电脑上编译。

更新2:
样本中包含MyClass的模式

更新3:
@DK – 我让我的同事在他的应用程序中添加了以下配置部分:

              

他收到了以下编译错误:无法识别的元素’providerOption’。

这似乎是VS.2008中唯一类似但不完全相同的错误:

编译器错误CS1526:类型后新表达式需要(),[] 或{}

请注意错误消息中的那些{} ,它们是c#3.0语法的一部分。 这与框架版本无关,而与语言版本无关。

我敢打赌,不知何故使用了不同版本的编译器。

补充:这看起来像ASP.Net可能存在的问题。 要检查的地方是.config文件,元素

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

应该有

  

它在我的电脑上给了我糟糕的编译信息

试试这个

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

请注意,MyClass类创建后还有另一个括号。

他的项目是针对.NET 3.5吗? 如果没有,则会在x.Add(新的MyClass行)上抛出该错误,因为新类没有指定构造函数或索引器。

你确定你使用完全相同的代码吗?

您提供的代码无法编译,因为它缺少MyClass的声明。 请为我们提供完整的compiland,而不仅仅是代码片段。 然后将该文件发送给您的朋友,以确保您仍然可以在计算机上看到不同的行为。

错误消息指向一行和一列,对吧? 告诉我们在哪里。

你们都在同一个.NET服务包级别吗? 我今天被咬了,因为一台机器是.NET 3.5 RTM,另一台机器是.NET 3.5 SP1。 在.NET 3.5 SP1(也安装.NET 2.0 SP2)中,他们为我在开发框中使用的System.Web.Caching.Cache.Insert方法引入了一个新的重载,然后在中间预构建环境中失败:

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

花了几分钟来训练为什么这台机器在一台机器上被打破而另一台机器没有…

更新:错误消息‘新表达式需要()或类型后面的[]通常意味着你错过了一个构造函数的parens。 你确定你没有错过()的线路:

 List x = new List(); 

或者在附近的某个地方?

再次更新 :我已经构建了以下内容:

 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 x = new List(); x.Add(new MyClass { Property1 = "Kev", Property2 = "Kev 2" }); } } } 

VS2008 SP1目标3.5 – 编译好
VS2008 SP1目标3.0 – 编译好
VS2008 SP1目标2.0 – 编译好

VS2008 RTM – 目标3.5 – 编译好
VS2008 RTM – 目标3.0 – 编译好
VS2008 RTM – 目标2.0 – 编译好

VS2005 – 8.0.50727.867(在配备VS2008 / 3.5 SP1的机器上) – 失败:

在类型’Test.MyClass.Property1.get’之后需要()或[]的新表达式必须声明一个主体,因为它没有标记为抽象或外部
‘Test.MyClass.Property1.set’必须声明一个body,因为它没有标记为abstract或extern
‘Test.MyClass.Property2.get’必须声明一个正文,因为它没有标记为抽象或外部
‘Test.MyClass.Property2.set’必须声明一个body,因为它没有标记为abstract或extern

VS2005 – 8.0.50727.762(在配备VS2008 / 3.5 RTM的机器上) – 失败:

在类型’Test.MyClass.Property1.get’之后需要()或[]的新表达式必须声明一个主体,因为它没有标记为抽象或外部
‘Test.MyClass.Property1.set’必须声明一个body,因为它没有标记为abstract或extern
‘Test.MyClass.Property2.get’必须声明一个正文,因为它没有标记为抽象或外部
‘Test.MyClass.Property2.set’必须声明一个body,因为它没有标记为abstract或extern

我倾向于认为问题不在于您呈现的代码,除非使用上述代码或类似代码提供了编译错误示例的屏幕截图。 有没有机会把东西煮成简单的东西来消除红鲱鱼?

干杯
千电子伏

你的代码对我来说完美无瑕。 您确定该项目正在编译到3.5框架吗? 从“项目”菜单中选择项目属性,转到“应用程序”选项卡,然后查看“目标框架”下拉列表。

他使用的是System.Collections.Generic吗?

在代码示例中的新MyClass之后添加“()”,或从MyClass中删除空构造函数。