【问题标题】:C# equivalent of the VB.Net select case trueC# 等效于 VB.Net 选择案例 true
【发布时间】:2021-04-23 13:24:08
【问题描述】:

我正在尝试找到与 VB.Net Select Case True 等效的 C#,我发现它在过去非常有用。在 VB.Net 中,我可以编写(一个任意示例,其中属性是对象类型并且传递一个布尔值或表达式类的实例):

Select Case True
    Case value Is Nothing:
        Throw New Exception("Invalid value.")

    Case value.ToString() == "True":
        moValue = value

    Case value.ToString() == "False":
        moValue = value

    Case value.GetType().Name = "Expression":
        moValue.DataTypeCode = "BOOLEAN"
        moValue = value

    Case Else:
        Throw New Exception("Invalid value.")
End Select

显然,我知道 switch 语句,但据我所知,case 值不能是表达式。尽管 C# 实践者可能对上述内容犹豫不决,但我发现它非常有用,因为它将我的测试用例按照分析顺序排列在一个列表中。

是否有一个 C# 构造,我可以在这样的列表中包含一堆测试用例并处理第一个评估为 true 的测试用例,而不必嵌套一堆 if...else 的?

【问题讨论】:

  • 惯用的等价物是if/else if/else if/.../else 表达式。无需嵌套它们。您可以使用带有when 子句的switch 语句来执行此操作,但请不要
  • c#可以有switch expressions
  • 很好奇与编写 If/Else 序列相比,您发现“Select Case True”如何有用。 Select Case True 似乎没有给你任何有用的东西,如果有任何东西混淆了逻辑。请注意,正如@canton7 指出的那样,不需要嵌套。
  • @gunr2171:目标不是故意让它更难理解。
  • @DaveDoknjas 我完全同意使用这样的开关(在任何一种语言中)会使它更难理解,只是指出开关表达式存在,尽管可能不是 100% 的翻译。

标签: c# vb.net switch-statement


【解决方案1】:

在 C# 中,你可以写成 if/else if/else 语句:

if (value == null)
{
    throw new Exception("Invalid value");
}
else if (value.ToString() == "True" || value.ToString() == "False")
{
    moValue = value;
}
else if (value.GetType().Name == "Expression")
{
    moValue.DataTypeCode = "BOOLEAN";
    moValue = value;
}
else
{
    throw new Exception("Invalid value");
}

可以使用switch statement with when clauses 执行此操作,但请不要这样做。


顺便说一句,这个稍微冗长的案例:

else if (value.ToString() == "True" || value.ToString() == "False")

也可以写成更简洁的模式:

else if (value.ToString() is "True" or "False")

【讨论】:

  • 谢谢@canton7。直到现在,我一直在 else 之后使用大括号,否则在我看来,语法是模棱两可的。例如,上面的最后一个 else 是否与第一个 if 或最后一个相关?取决于你把括号放在哪里。请问when 的问题是什么?我以前没有遇到过。
  • 顺序是首先评估if,然后如果不匹配,评估else if,然后评估else if,等等,从上到下。如果执行到达else,但没有匹配到if/else if 的臂,则执行进入else。这种行为在所有具有这种结构的语言中都很常见
  • 它与您问题中的Case / Case / Case Else 完全相同——else 的工作方式与您的Case Else 的工作方式相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 2011-05-07
相关资源
最近更新 更多