4

编译一些 C# 代码时,我收到错误:

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

我的代码如下:

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

我正在使用 ASP.NET 2.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 回答