Sto scrivendo un programma che deve essere in grado di elaborare i dati da diverse fonti diverse. Le fonti generano dati in una varietà di formati. Quindi, a seconda di quale fonte viene utilizzata, ho bisogno di inizializzare una lista di stringhe con un diverso set di intestazioni di colonna. La quantità di intestazioni varia tra 10 e 18 colonne in base all'origine dati.
Essenzialmente, ho bisogno di un metodo pulito per inizializzare in modo condizionale un elenco. Ho tre soluzioni funzionanti, ma non sono sicuro di quale sia la migliore / migliore pratica:
- L'Esempio n. 1 richiede che aggiungo ogni intestazione alla lista riga per riga. Con il numero di potenziali fonti e colonne che devono essere aggiunte per ciascuna, questa lista diventa piuttosto lunga.
- L'Esempio # 2 richiede che io uso {} attorno ad ogni dichiarazione di caso per limitare l'ambito in modo che io possa dichiarare l'elenco dataHeaders individualmente in ogni dichiarazione di caso. Non ho mai incontrato una situazione in cui ho dovuto limitare la portata a una singola dichiarazione di un caso e, come tale, sospetto che sia una cattiva pratica.
- L'esempio # 3 sembra l'opzione migliore. In realtà ho implementato questo mentre stavo scrivendo questa domanda. Non vedo davvero alcun inconveniente, ma ho pensato che avrei comunque posto la domanda comunque.
C'è un modo migliore / più pulito per fare questo? In caso negativo, quale esempio è la migliore pratica?
Esempio 1:
List<string> headers = new List<string>();
switch (dataSource)
{
case "Source 1":
headers.Add("header1");
headers.Add("header2");
headers.Add("header3");
headers.Add("...");
headers.Add("header18");
break;
case "Source 2":
headers.Add("headerA");
headers.Add("headerB");
headers.Add("headerC");
headers.Add("...");
headers.Add("headerJ");
break;
default:
// TODO: Handle bad sources.
break;
}
Esempio n. 2:
List<string> headers = new List<string>();
switch (dataSource)
{
case "Source 1":
{
List<string> dataHeaders = new List<string>() { "header1", "header2", "header3", "...", "header18" }
headers = dataHeaders;
break;
}
case "Source 2":
{
List<string> dataHeaders = new List<string>() { "headerA", "headerB", "headerC", "...", "headerJ" }
headers = dataHeaders;
break;
}
default:
{
// TODO: Handle bad sources.
break;
}
}
Esempio n. 3:
List<string> headers = new List<string>();
switch (dataSource)
{
case "Source 1":
headers.AddRange(new List<string>() { "header1", "header2", "header3", "...", "header18" })
break;
case "Source 2":
headers.AddRange(new List<string>() { "headerA", "headerB", "headerC", "...", "headerJ" })
break;
default:
// TODO: Handle bad sources.
break;
}