【问题标题】:Simpler syntax for C and C# conditional statements [closed]C 和 C# 条件语句的更简单语法 [关闭]
【发布时间】:2015-04-03 12:56:36
【问题描述】:

我希望能够像这样比较整数和字符串:

if(a==b==c==d==e)

不幸的是,C# 不会编译它(我不确定 C)。

如果我能解决这个问题,有什么想法吗?为什么 C# 团队不允许这种更简单的语法? (而不是像a==b && a==c && a==d && a==e 这样的麻烦)。

作为一个单独的查询,if(someValue == (5 || 6 || 7 || 8)) 而不是一直说someValue==5 || someValue==6 || etc. etc. 有什么问题?显然,1 或更多被 .NET 视为“真”,但我认为我们应该用更短的语法替换该范式以简化代码的阅读和编写。

********* 编辑: 正如有人在 cmets 中所说,由于优先级问题,a==b==c==d==e 在使用布尔逻辑时会出现问题(例如:(false==false) == false)。但是,使用整数或字符串时不会出现此类问题。

【问题讨论】:

  • if(someValue==5 || 6 || 7 || 8) --> 检查运算符优先级。
  • a==b==c(a==b) == c 相同,与 a==b && b == c 完全不同
  • @SouravGhosh:谢谢,已编辑。
  • 你知道(5 || 6 || 7 || 8)的结果吗?
  • @SouravGhosh:在 C# 中,它无法编译。在 C 语言中,我猜是“真”,但我希望将其重新用于更简单的语法,因为几乎没有人将整数用于布尔逻辑。

标签: c# c syntax conditional-statements


【解决方案1】:

您基本上需要检查所有变量是否具有相同的值?在它们是原始类型(int、string、double 等)之前,您可以将它们放入不同的集合中,并检查它是否只包含一个元素,如下所示:

var collection = new[] {a,b,c,d,e};
if(collection.Distinct().Count() == 1)
{
    // means a==b==c==e
}

【讨论】:

  • 谢谢,但这违背了我最初试图实现的目的——更简单、更简洁的语法。
  • 您可以为此目的为 IEnumerable 创建自定义扩展,因此语法会更“含糖”。
  • 哦,听起来不错。我仍然想知道为什么默认情况下这样的东西不是语言的一部分。
  • 看,这很简单。如果ab 是int,a == b 的结果是什么?结果是bool。如果你写a==b==c,你实际上会尝试比较a == (b == c),这将导致比较intbool
  • 是的,我编辑了我的问题以澄清这一点。在这种情况下,整数和字符串应与布尔值区别对待。
猜你喜欢
  • 1970-01-01
  • 2019-04-12
  • 2018-02-22
  • 1970-01-01
  • 2011-02-02
  • 2015-06-09
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
相关资源
最近更新 更多