我该怎么做呢?我试过了
case (item.Contains("Phone")):
这不起作用,我已经尝试了
case (item.Contains("Phone") == true):
我可以在没有switch语句的情况下执行此操作...
if (item.Contains("Phone"))
但这看起来有点乱,而且转换声明看起来更清晰。
答案 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
处查看详细信息