1. ホーム
  2. c#

[解決済み] 埋め込みステートメントは、宣言やラベル付きステートメントにはできません。

2022-01-29 12:56:31

質問事項

claim identity 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 ,

                        };

完璧に動作していたので、何が問題なのか知りたいです。

どうすればいいですか?

あるステートメント( もし または 間に のように)、中括弧を付けずに投稿されたコードの直前で行います。

例えば

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