根据枚举值调用不同的方法而不使用switch

时间:2010-05-24 20:07:06

标签: c# .net

我有以下代码:

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,因为我可能有太多枚举类型。 还有其他办法吗?或者,这是唯一可行的方式吗?

2 个答案:

答案 0 :(得分:1)

这是你想要的吗? operator for enums
试试第一个答案。

答案 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() 
{
    ....
}

但如果不是绝对必要,我不会真的推荐这种方法。除其他外,维持这一点可能会很痛苦。