© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•2y ago•
17 replies
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;
}
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
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
SingleDataObjectFromXDoc
or
MultipleDataObjectsFromXDoc
MultipleDataObjectsFromXDoc
)
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources

Similar Threads

Was this page helpful?
Recent Announcements

Similar Threads

Switch statements
C#CC# / help
13mo ago
❔ alternative to switch statement or if statements?
C#CC# / help
4y ago
❔ Tests best practice
C#CC# / help
3y ago