Используйте словарь. Я предвижу, что в будущем вы будете взорваны новыми случаями, вообще говоря, стены if
и большие операторы switch
являются плохим кодом. В похожей ситуации я создал что-то вроде этого:
private static readonly Dictionary<RuntimeTypeHandle, Action<object>> handleMsgImplementations = new Dictionary<RuntimeTypeHandle, Action<object>>
{
{ typeof(Tomato).TypeHandle, x => Handle_Tomato((Tomato)x) },
// etc...
};
// Then instead of if, use this (prepare a catch for Invalid Key or use a TryGetValue)
handleMsgImplementations[msg.GetType().TypeHandle](msg);
Я получаю TypeHandle, потому что мне нравится использовать тип значения для ключа.
РЕДАКТИРОВАТЬ: @TheGeneral ответ является лучшим, также, компилятор C # создает словарь под капотом, когда количество случаев начинает ухудшать производительность. Я держу свой ответ, потому что я верю, что добавляет ценность.