C# 开关大小写字符串结尾为



有没有办法在switch语句中设置一个案例条件,你说一个字符串是否以某物结尾?

switch (Pac.Sku)
{
case "A":
pacVM.Sucursal = "Managua";
break;
case "B":
pacVM.Sucursal = "Masaya";
break;
case "C":
pacVM.Sucursal = "Leon";
break;
default:
pacVM.Sucursal = "N/A";
break;
}

获取字符串的最后一个字符,并切换结果:

switch (Pac.Sku.Last())
{
case 'A':
pacVM.Sucursal = "Managua";
break;
case 'B':
pacVM.Sucursal = "Masaya";
break;
case 'C':
pacVM.Sucursal = "Leon";
break;
default:
pacVM.Sucursal = "N/A";
break;
}

如果字符串可以是null或空的,请使用类似此函数的内容而不是Last()。此函数返回null字符串是否nullnull字符串是否为空,如果字符串不null或空,则返回字符串的最后一个字符:

char? GetLast(string s)
{
return s?.Length > 0 ? s.Last() : (char?)null;
}

开关:

switch(GetLast(Pac.Sku))

我认为这不是一种方法! 您只能使用 if-else

if (Pac.Sku.EndsWith("A") )
{
pacVM.Sucursal= "Managua";
}
else if (Pac.Sku.EndsWith("B"))
{
pacVM.Sucursal= "Masaya";
}
else if (Pac.Sku.EndsWith("C"))
{
pacVM.Sucursal= "Leon";
}
else
{
pacVM.Sucursal= "N/A";
}

你可以 使用 C# 7.0 的模式匹配功能来实现此目的。这是一个非常基本的例子:

var t = "blah";
switch (t)
{
case var a when t.EndsWith("bl"):
Console.WriteLine("I'm not here");
break;
case var b when t.EndsWith("ah"):
Console.WriteLine("I'm here");
break;
}

你可以用这样的Func<string, string>[]来发挥创意:

Func<string, string>[] cases = new Func<string, string>[]
{
x => x.EndsWith("A") ? "Managua" : null,
x => x.EndsWith("B") ? "Masaya" : null,
x => x.EndsWith("C") ? "Leon" : null,
x => "N/A",
};
Func<string, string> @switch = cases.Aggregate((x, y) => z => x(z) ?? y(z));
string result = @switch(Pac.Sku);

我已经使用与每种情况匹配的示例输入对此进行了测试,并且效果很好。

此方法的一个显著优点是可以在运行时生成Func<string, string>[]。非常适合创建可配置的解决方案。

您也不仅限于使用EndsWith- 可以使用适合目的的任何条件。

相关内容

最新更新