Sto creando un programma simile a CMD in cui l'utente gestisce il suo "disco" con i comandi. Mi piacerebbe sapere se c'è un modo di fare questo tipo di applicazione in un modo più semplice / migliore. In realtà sto facendo così:
Elenco dei comandi
Ho creato un enum con tutti i comandi per aggiungere e gestire facilmente i comandi
Esecuzione della riga di comando
Per sapere quale comando sta cercando di eseguire l'utente ottengo una lista con i valori enum e procedo a ottenere il comando nella lista.
var list = ((Commands[])Enum.GetValues(typeof(Commands))).ToList();
var commandText = inputLine.Split(' ')[0];
if (list.Select(x => x.ToString().ToLower()).Contains(commandText))
{
var command = list.FirstOrDefault(x => x.ToString().ToLower() == commandText);
switch (command)
{
case Commands.List:
Listar();
break;
case Commands.Go:
Go();
break;
}
}
Modifica:
La domanda è stata sbagliata, non sto cercando di trovare un modo migliore per risolvere il problema dello switch, lo sto utilizzando perché è un numero limitato di comandi, quindi ha senso utilizzarlo. La risposta che volevo era solo un modo migliore per creare un parser della riga di comando. In realtà sono in una competizione in cui non ho accesso a Internet, quindi niente NuGet.
Anche il modo di ottenere i parametri sembra sbagliato:
var temp = _line.Split('"').ToList();
var vals = new List<string>();
for (int i = 0; i < temp.Count; i++)
{
if (i % 2 == 0)
vals.AddRange(temp[i].Split('-').Select(x => x.Trim()));
else
vals.Add(temp[i]);
}
var path = _currentDirectory;
if (vals.Contains("p"))
path = vals[vals.IndexOf("p") + 1];