我有以下代码:
public void ParseNetworkPacket(IAsyncResult iResult)
{
NetworkConnection networkConnection = (NetworkConnection)iResult.AsyncState;
string teste = NetworkPacketType.ToString();
switch (this.NetworkPacketType)
{
case NetworkPacketType.ShotPacket:
break;
case NetworkPacketType.ShotResponsePacket:
break;
case NetworkPacketType.ChatMessagePacket:
break;
default:
break;
}
networkConnection.BeginReadPacket();
}
NetworkPacketType是我定义的枚举。 在交换机中,根据枚举的类型,我会调用另一种方法。 我想这样做不使用switch,因为我可能有太多枚举类型。 还有其他办法吗?或者,这是唯一可行的方式吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
除了使用Veer链接的答案中建议的地图外,您还可以使用反射。例如,如果您将方法命名为enum值,则可以这样做:
public void ParseNetworkPacket(IAsyncResult iResult)
{
NetworkConnection networkConnection = (NetworkConnection)iResult.AsyncState;
string teste = NetworkPacketType.ToString();
string methodName = this.NetworkPacketType.ToString();
MethodInfo methodInfo = GetType().GetMethod(methodName,
BindingFlags.Instance | BindingFlags.NonPublic);
methodInfo.Invoke(this, /* your arguments here */);
networkConnection.BeginReadPacket();
}
private void ShotPacket()
{
....
}
但如果不是绝对必要,我不会真的推荐这种方法。除其他外,维持这一点可能会很痛苦。