嵌套语句不能是声明或带标签的语句。

87

我正在尝试使用声明标识创建一个用户,但在创建声明标识用户时出现了这个错误。

  ApplicationUser user = new ApplicationUser { 
                        EmailConfirmed = true, 
                        UserName = model.myUser.Email,
                        Email = model.myUser.Email ,
                        PhoneNumber = model.myUser.PhoneNumber,
                        PhoneNumberConfirmed = true,
                        UserImagePath = model.myUser.UserImagePath,
                        FirstName= model.myUser.FirstName,
                        LastName = model.myUser.LastName,
                        DateOfBirth = model.myUser.DateOfBirth,
                        Culture = model.myUser.Culture,
                        Role = model.myUser.Role
                    };

但是当代码被执行时

var user= new ApplicationUser { 

                            UserName = model.myUser.Email,
                            Email = model.myUser.Email ,

                        };

它完美地运行了,所以我想知道问题出在哪里。


我在这里看不到任何问题。也许你可以逐个从语句中删除一个属性,以限制故障点。 - MakePeaceGreatAgain
我遇到了一个错误。是什么错误?您尝试逐行删除以找出问题所在了吗? - David Arno
对不起,如果我表达不清楚。在ApplicationUser user上,我得到了“嵌入语句不能是声明或标记语句”的错误提示。 - husseinbaalbaki
我猜我知道@husseinbaalbaki的意思,他只是没有解释清楚。这是一个C#编译错误。 - felix-b
2个回答

207

你在发布的代码中,有一条语句(例如ifwhile),紧跟在之前却没有用花括号包裹。

例如:

if (somethingIsTrue) 
{    
   var user= new ApplicationUser { 
       UserName = model.myUser.Email,
       Email = model.myUser.Email ,
   };
}

是正确的,但以下代码:

if (somethingIsTrue) 
   var user = new ApplicationUser { 
      UserName = model.myUser.Email,
      Email = model.myUser.Email ,
   };

这将导致错误 CS1023: 嵌套语句不能作为声明或带标签的语句。

更新

根据@codefrenzy的说法,原因是新声明的变量将立即超出其作用域,除非它被包含在块语句中,在这里它可以被访问。

以下情况编译将通过。

如果您只初始化类型的新实例,而不声明新的变量:

if (somethingIsTrue) 
   new ApplicationUser { 
       UserName = model.myUser.Email,
       Email = model.myUser.Email ,
   };

或者如果您将值分配给现有变量:

ApplicationUser user;

if (somethingIsTrue) 
   user = new ApplicationUser { 
       UserName = model.myUser.Email,
       Email = model.myUser.Email ,
   };

10
我刚遇到了这个错误,解决方法是在我的代码前面的if语句中添加一个花括号,再将其删除。Visual Studio脸掌机OTD。

4
这个回答不应该被踩。有时候会出现这种错误(当没有声明新变量时)。当 Visual Studio 发生意外情况时,像这样的解决方案可以很好地修复它。对我们而言,重新启动 VS 有助于解决这个问题。 - Martijn
1
和我一样。有时候,VS会被旧的编译错误的幽灵所困扰,只有重新启动才能解决问题。 - Matthew Lock
我刚刚关闭了文件,然后重新打开它,不需要关闭VS。 - Nick M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接