以下代码的同事在尝试使用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框架
他正在使用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'。
答案 0 :(得分:7)
这似乎是VS.2008中唯一相似但不完全相同的错误:
编译器错误CS1526:一个新的 表达式需要(),[] 或{} 在类型
之后
请注意错误消息中的{}
,它们是c#3.0语法的一部分。这与框架版本无关,而与语言版本无关。
我敢打赌,不知何故使用了不同版本的编译器。
补充:这看起来像ASP.Net可能存在的问题。要检查的地方是.config文件,元素
configuration\system.codedom\compilers\compiler @language="c#..."
应该有
<providerOption name="CompilerVersion" value="v3.5"/>
答案 1 :(得分:4)
它在我的电脑中给出了错误的编译信息
试试这个
x.Add(new MyClass()
{
Property1 = "MyValue",
Property2 = "Another Value"
});
注意,MyClass类创建后还有另一个括号。
答案 2 :(得分:3)
他的项目是否针对.NET 3.5?如果没有,则会在x.Add(新的MyClass行)上抛出该错误,因为新类没有指定构造函数或索引器。
答案 3 :(得分:2)
您确定使用完全相同的代码吗?
您提供的代码无法编译,因为它缺少MyClass
的声明。请为我们提供完整的compiland,而不仅仅是代码片段。然后将该文件发送给您的朋友,以确保您仍然可以在计算机上看到不同的行为。
错误消息指向一行&amp;专栏,对吗?告诉我们在哪里。
答案 4 :(得分:2)
您是否处于相同的.NET Service Pack级别?我今天被咬了,因为一台机器是.NET 3.5 RTM,另一台机器是.NET 3.5 SP1。在.NET 3.5 SP1(也安装.NET 2.0 SP2)中,他们为我在开发框中使用的System.Web.Caching.Cache.Insert方法引入了一个新的重载,然后在中间预构建环境中失败:< / p>
public void Insert(
string key,
Object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration,
CacheItemUpdateCallback onUpdateCallback
)
我花了几分钟来训练为什么在一台机器上打破了这个而不是另一台机器......
更新:错误消息'新的表达式需要()或类型之后的[]通常意味着您错过了构造函数的parens。你确定你没有错过()离线:
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目标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'必须声明一个正文,因为它没有标记为抽象或外部 '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'必须声明一个正文,因为它没有标记为抽象或外部
我倾向于认为问题不在于您呈现的代码,除非使用上述代码或类似代码提供了编译错误示例的屏幕截图。有没有机会将事情简化为简单的东西以消除红鲱鱼?
干杯
千电子伏
答案 5 :(得分:1)
您的代码对我来说完美无瑕。您确定该项目正在编译到3.5框架吗?从Project菜单中选择项目属性,转到Application选项卡,然后查看Target Framework下拉列表。
答案 6 :(得分:0)
他使用的是System.Collections.Generic吗?
答案 7 :(得分:0)
在代码示例中的新MyClass之后添加“()”,或从MyClass中删除空构造函数。