web-dev-qa-db-ja.com

埋め込みステートメントは宣言またはラベル付きステートメントにすることはできません

クレームID asp.netを使用してユーザーを作成しようとしています。クレームIDユーザーの作成中にこのエラーが発生します。

  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 ,

                        };

それは完璧に機能したので、何が間違っているのか知りたい

47
husseinbaalbaki

投稿したコードの直前に、中括弧なしのステートメント(ifまたはwhileなど)があります。

例えば:

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 ,
   };
117
felix-b

このエラーが発生したばかりで、修正はコードの直前のifに中括弧を追加してから、再度削除することでした。 Visual Studio facepalm OTD。

0
Mel Padden