C#C
C#2y ago
stigzler

Best practice to eliminate switch statements?

I have a terrible feeling this is bad:
switch (apiQueryType)
{
    case ApiListRequest.ServerInfo:
        apiReturn.DataObject = SingleDataObjectFromXDoc<Server>(xDoc, "serveurs");
        break;
    case ApiListRequest.UserInfo:
        apiReturn.DataObject = SingleDataObjectFromXDoc<User>(xDoc, "ssuser");
        break;
    case ApiListRequest.UserLevelsList:
        apiReturn.DataObject = MultipleDataObjectsFromXDoc<UserLevel>(xDoc, "userlevel");
        break;
    case ApiListRequest.GameInfoTypeList:
        apiReturn.DataObject = MultipleDataObjectsFromXDoc<Data.Entities.GameInfoType>(xDoc, "info");
        break;
    case ApiListRequest.RomInfoTypeList:
        apiReturn.DataObject = MultipleDataObjectsFromXDoc<Data.Entities.RomInfoType>(xDoc, "info");
        break;
    case ApiListRequest.SystemList:
        apiReturn.DataObject = MultipleDataObjectsFromXDoc<Data.Entities.System>(xDoc, "systeme");
        break;
    case ApiListRequest.NumberOfPlayersList:
        apiReturn.DataObject = MultipleDataObjectsFromXDoc<Data.Entities.NumberOfPlayers>(xDoc, "nbjoueur");
        break;
        //.... loads more of these...
    default:
        break;
}

How would you go about refactoring it. My basic thinking is to create a class which contains the string, the apiReturn enum, the Object type (how would you do this?) and something to help any function to call the right method (one of two: SingleDataObjectFromXDoc or MultipleDataObjectsFromXDoc)
Was this page helpful?