如何在switch语句中使用Line.Contains()?

时间:2014-09-12 15:48:09

标签: c# switch-statement contains

我该怎么做呢?我试过了

case (item.Contains("Phone")):

这不起作用,我已经尝试了

case (item.Contains("Phone") == true):

我可以在没有switch语句的情况下执行此操作...

if (item.Contains("Phone"))

但这看起来有点乱,而且转换声明看起来更清晰。

4 个答案:

答案 0 :(得分:3)

只有在变量只能得到一组固定值时才能使用切换。 Contains方法不适合这种情况,也不能使用任何表达式(更高,更低等)。

如果您需要这样的功能,则必须使用if,或者如果您知道搜索字符串将位于某个位置,您可以先获取该值,然后使用开关。

Switch不像if那样工作,它仅用于教程中的初学者,以帮助他们理解概念,但这两种语言功能不可互换。它们在性能方面有所不同,大多数时候你无法将其转换为另一种。

答案 1 :(得分:2)

如果考虑后果,那么switch语句看起来不那么清晰。使用以下假设代码,如果c#在问题中隐含,则编译将编译,但不会:

switch
{
    case (item.Contains("Phone")): return 1;
    case (item.Contains("Computer")): return 2;
    case (item.Contains("Car")): return 3;
}

现在,如果item包含电话,计算机汽车,应该返回什么? Switch语句必须是简单的多选语句,其中只有一个答案可以为真。这就是为什么他们只接受简单的类型,而不是条件。他们的工作方式如下:

switch (item)
{
    case "Phone": return 1;
    case "Computer": return 2;
    case "Car": return 3;
}

答案 2 :(得分:2)

switch / case无法以这种方式运作。所有案例标签都应该是常量,item.Contains("Phone")不是。

答案 3 :(得分:0)

如果您正在使用C#8在此上运行,则可以使用switch表达式来验证结果,如下所示


var item = "This is a Phone device"

var deviceDescription = item switch
{
    string a when a.Contains("Phone") => "Yes it is a Phone",
    string b when b.Contains("Computer") => "Yes, it is a Computer",
    string c when c.Contains("Tablet") => "Yes, it is a Tablet",
    _ => "Item doesn't match any criteria"
};

您可以在https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/switch-expression

处查看详细信息