【问题标题】:Understanding c# syntax of return statement了解return语句的c#语法
【发布时间】:2017-01-31 19:58:46
【问题描述】:

我正在尝试理解别人编写的一段代码的语法。

该方法返回一个布尔值,return 语句如下所示:

 return user.UserStatus == Models.User.UserStatuses.Inactive && user.IsLocked;

UserStatuses 是一个枚举。

所以在我看来,它返回了名为 UserStatus 的对象用户的属性,但是 UserStatus 是一个枚举,而不是布尔值,然后 && 将布尔值添加为 user.IsLocked,其中是一个布尔值。

我似乎无法理解这在 c# 中是如何合法的,因为它似乎返回两个参数。

【问题讨论】:

  • return a == b && c 更有意义?
  • 它不返回两个参数,它正在检查 user.UserStatus 是否等于 Inactive 状态和 bool 值 user.IsLocked 是否为真(真)。如果两者都为真,则返回真。否则为假
  • user.UserStatus == Models.User.UserStatuses.Inactive 是一个布尔值。 UserStatus 是否处于非活动状态。 user.IsLocked 也是一个布尔值。现在你有了boolean && boolean,这应该是有道理的。
  • 所以我可以返回任意数量的布尔值,结果会自动组合成一个布尔值?
  • @Dylan 如果将它们与 && 和 || 等语句结合使用是的,因为最后 expression 仍然返回一个 bool

标签: c#


【解决方案1】:

添加一些括号,或者将你的行分成多个语句,这很有意义。编译器只是为你做(或多或少)。你的陈述相当于:

return ((user.UserStatus == Models.User.UserStatuses.Inactive) && user.IsLocked);

bool inactive = user.UserStatus == Models.User.UserStatuses.Inactive;
bool inactiveAndLocked = inactive && user.isLocked;
return inactiveAndLocked;

这里的关键是 return 采用 表达式(不是参数)并使用该表达式的结果,这只是 C# 规范所规定的一个“事物”。

【讨论】:

  • 返回的实际“布尔”实际上是一个枚举,这就是让我失望的原因。它在 SQL 中定义为 int,而不是 bool,但它以 bool 形式返回?
  • @Dylan 你能说得更具体点吗?没有枚举返回,因为表达式 <object> == <object> 总是返回 bool== 运算符的定义)
  • 我理解这个想法,我认为这只是让我离开这里的语法。当你把它写成 if 语句时,它更有意义。
  • @Dylan 尽量记住if 语句使用布尔表达式(就像这里一样)。在返回(返回布尔值)中使用它和在 if 中使用它没有区别
【解决方案2】:
bool result = (user.UserStatus == Models.User.UserStatuses.Inactive) &&
               user.IsLocked;
return result;

【讨论】:

  • 虽然您可能已经解决了这个用户的问题,但纯代码的答案对以后遇到这个问题的用户没有太大帮助。请编辑您的答案以解释为什么您的代码解决了原始问题。
【解决方案3】:

它只是返回一个布尔条件。假设您还可以在 IF 语句中检查相同的代码,例如:

if(user.UserStatus == Models.User.UserStatuses.Inactive && user.IsLocked)

【讨论】:

  • 没问题,刚开始读时以为是一个不熟悉的词,后来意识到可能是拼写错误,想确认一下:)
【解决方案4】:

UserStatus 是一个枚举,但枚举的基本类型是 int。这与特定的枚举类型进行了比较。所以第一部分基本上是 (int == int) ,它产生一个布尔值。然后布尔值与 IsLocked 值 (bool && bool) 有条件地相加,以产生最终结果。

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多