看来 C# 不能switch
在类型上(我收集的没有作为特殊情况添加,因为is
关系意味着不止一种不同的case
可能适用),除此之外还有更好的方法来模拟打开类型吗?
void Foo(object o)
{
if (o is A)
{
((A)o).Hop();
}
else if (o is B)
{
((B)o).Skip();
}
else
{
throw new ArgumentException("Unexpected type: " + o.GetType());
}
}
使用 C#7,它随 Visual Studio 2017(版本 15.*)一起提供,您可以在case
语句(模式匹配):
switch(shape)
{
case Circle c:
WriteLine($"circle with radius {c.Radius}");
break;
case Rectangle s when (s.Length == s.Height):
WriteLine($"{s.Length} x {s.Height} square");
break;
case Rectangle r:
WriteLine($"{r.Length} x {r.Height} rectangle");
break;
default:
WriteLine("<unknown shape>");
break;
case null:
throw new ArgumentNullException(nameof(shape));
}
在 C# 6 中,您可以将 switch 语句与nameof() 运算符(感谢@乔伊·亚当斯):
switch(o.GetType().Name) {
case nameof(AType):
break;
case nameof(BType):
break;
}
对于 C# 5 及更早版本,您可以使用 switch 语句,但您必须使用包含类型名称的魔术字符串...这不是特别适合重构(感谢 @nukefusion)
switch(o.GetType().Name) {
case "AType":
break;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)