嵌入式语句不能是声明或带标签的语句

时间:2016-07-14 12:36:24

标签: c# model-view-controller claims-based-identity

我正在尝试使用声明身份asp.net创建用户 我在创建声明身份用户时遇到此错误。

  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 ,

                        };

它工作得很好,所以我想知道出了什么问题

2 个答案:

答案 0 :(得分:100)

您在发布的代码之前有一个声明(例如,如果,而),没有大括号。

例如:

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 ,
   };

答案 1 :(得分:0)

我刚刚遇到此错误,修复方法是在我的代码前面添加一个花括号,然后再将其删除。 Visual Studio facepalm OTD。