【问题标题】:Embedded statement cannot be a declaration or labeled statement嵌入语句不能是声明或标签语句
【发布时间】:2016-11-17 09:10:27
【问题描述】:

我正在尝试使用声明身份 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 ,

                        };

效果很好,所以我想知道哪里出了问题

【问题讨论】:

  • 我在这里看不到任何问题。也许您可以从语句中删除一个又一个属性以限制故障点。
  • “我收到此错误”。什么错误?您是否尝试过一次删除一行以找出问题所在?
  • 对不起,如果我不清楚,我得到嵌入式声明不能是声明或标签声明,在 ApplicationUser 用户上
  • 我想我知道@husseinbaalbaki 的意思,他只是没有很好地解释自己。这是一个 C# 编译错误。

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


【解决方案1】:

您有一个语句(例如,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 ,
   };

【讨论】:

  • 那是真的,非常感谢你,我非常专注于这一点,以至于我忘记了“if”语句。谢谢 felix-b
  • @felix-b 这非常有用。我摔断了头 30 分钟。没想到解决办法这么简单。
  • 有谁知道这是为什么?
  • 我认为这与成功声明变量的命令有关。 if 将应用于变量的初始化(在上述情况下为用户)。但是执行的命令将在 if 之外,因此无法使用该变量。
  • 这很有意义,@codefrenzy。我会更新我的答案。
【解决方案2】:

我刚刚遇到了这个错误,解决方法是在我的代码前面的 if 添加一个花括号,然后再次删除它。 Visual Studio facepalm OTD。

【讨论】:

  • 这个答案不值得反对。此错误有时会在不应该出现的情况下发生(当没有声明新变量时)。当 VS 做了一些意想不到的事情时,这样的解决方案可能是一个很好的解决方案。对我们来说,重启 VS 帮助解决了这个问题。
  • 和我一样。 VS 有时会被旧编译错误的幽灵所困扰,只有重新启动才能修复它。
猜你喜欢
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多