【问题标题】:Is it possible to only use a part of a string in a Switch-Statement?是否可以仅在 Switch-Statement 中使用字符串的一部分?
【发布时间】:2020-07-21 19:44:14
【问题描述】:

savetext是一个随机长度+“!Command1”的字符串

switch (savetext)
{
    case savetext.EndsWith("! Command1"):
        System.Diagnostics.Debug.WriteLine("Test1");
        break;

    case savetext.EndsWith("! Command2"):
        System.Diagnostics.Debug.WriteLine("Test2");
        break;

    default:
        System.Diagnostics.Debug.WriteLine(savetext)
        break;
}

输出应该是“Test1”,但我的方法并没有像我想要的那样工作。我该如何解决这个问题?

【问题讨论】:

  • 在 C# 中使用 if/else(可以在 switch 语句中使用模式匹配来做到这一点,但它比等效的 if/else 更丑)
  • 您只能在 switch 语句中为 case 指定常量值。你应该在这里使用 if/else if/else
  • @OguzOzgul 那是not entirely true。你可以写成case var _ when savetext.EndsWith("! Command1"),但你也可以写成if (savetext.EndsWith("! Command1"))
  • 或者,获取字符串的最后 10 个字符并使用 case "! Command1":
  • @OguzOzgul var _ 是一个模式,when 在文档中被分组在“模式匹配”下。请参阅我之前的评论,了解如何将这些结合起来做 OP 想要的事情

标签: c# string switch-statement


【解决方案1】:

由于您要查找的后缀始终具有相同的长度,您可以使用Substring 提取它,然后在其上使用switch

String switcher = savetext.Substring(savetext.Length - 10);
switch (switcher)
{
    case "! Command1":
        System.Diagnostics.Debug.WriteLine("Test1");
        break;

    case "! Command2":
        System.Diagnostics.Debug.WriteLine("Test2");
        break;

    default:
        System.Diagnostics.Debug.WriteLine(savetext)
        break;
}

【讨论】:

  • 如果这样做,请注意检查savetext.Length是否为10或更多,否则如果太短可能会出现异常
  • 哦酷,这对我有很大帮助!但是当我也有一个随机后缀长度时是什么时候?
【解决方案2】:

C# 8 中的switch statement

var saveText = "111 ! Command1";
var logText = saveText switch
{
    var x when x.EndsWith("! Command1") => "Test 1",
    var x when x.EndsWith("! Command2") => "Test 2",
    var x => x
};

System.Diagnostics.Debug.WriteLine(logText);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多