如果找到字符串,则执行switch语句
本文关键字:执行 switch 语句 字符串 如果 | 更新日期: 2023-09-27 18:27:17
下面我把我要做的事情的伪代码放在一起。我不完全确定如何用C#编写。这样的事情可能吗?如果可能的话,我该怎么做?我想做的是,如果找到返回的值,就运行一个函数。
伪代码
string list = @"
This is a multiline statement
used for testing
"
foreach (var line in list)
{
switch (line)
{
case (line.Contains("multiline")):
Console.WriteLine("has A");
break;
case (line.Contains("testing")):
Console.WriteLine("has B");
break;
}
}
这是不可能的。使用switch
语句,您只需检查给定对象的值。尝试使用if:
foreach (var line in list)
{
if (line.Contains("multiline"))
Console.WriteLine("has A");
else if (line.Contains("testing"))
Console.WriteLine("has B");
}
来自MSDN文档:
switch语句是一个选择开关的控制语句从候选列表中执行的部分。
case语句是一个编译时常量。正确使用switch
语句可以是这样的:
int caseSwitch = /* get a int value*/;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default case");
break;
}
您尝试做的叫做"模式匹配"。C#还不支持这一点,尽管它作为下一个版本C#7的一个补充正在积极讨论中。
有第三方解决方案可以让你实现你想要做的事情。我自己的Succinc<T>例如,库将允许您将代码写为:
string list = @"
This is a multiline statement
used for testing
";
foreach (var line in list)
{
line.Match()
.Where(l => l.contains("multiline").Do(l => Console.WriteLine("has A"))
.Where(l => l.contains("testing").Do(l => Console.WriteLine("has B"))
.IgnoreElse()
.Exec();
}
可以说,与使用一系列if
相比,它可以带来更易于遵循、更具功能性的代码,尽管代价在于性能。
首先,您没有可以迭代的列表。你只是有一根绳子。你应该拆分你的字符串
string s = @"
This is a multiline statement
used for testing
";
string[] lines = s.Split(new string[] { "'r'n" }, StringSplitOptions.None);
然后case语句根据常量case值进行分支。在这种情况下不能执行条件表达式。因此,您需要使用一系列if-else语句
if (condition1) {
...
} else if (condition2) {
...
} else if (condition3) {
...
} else {
...
}