Embedded statement cannot be a declaration or labeled statement

I am trying to create a user using claim 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
};

but when the code was

var user= new ApplicationUser {


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


};

it worked perfectly, so i want to know what is wrong

95710 次浏览

You have a statement (if or while, for example), right before the code you posted, without curly braces.

For example:

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

is correct, but the code below:

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

will result in CS1023: Embedded statement cannot be a declaration or labeled statement.

UPDATE

The reason, according to @codefrenzy, is that the newly declared variable will immediately go out of scope, unless it is enclosed in a block statement, where it can be accessed from.

The compilation will pass in the following cases though.

If you only initialize a new instance of a type, without declaring a new variable:

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

or if you assign a value to an existing variable:

ApplicationUser user;


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

I just had this error, and the fix was to add a curly brace to the if immediately preceding my code, and then remove it again. Visual Studio facepalm OTD.