2011-10-17 18 views
10

Come si può eseguire il seguente condizionamento in linea per una stringa [] in C#. Sulla base di un parametro, vorrei includere un set di stringhe ... o no. Questa domanda è un seguito di this one on stackoverflow.C# inline condizionale nella stringa [] array

 //Does not compile 
     bool msettingvalue=false; 
     string[] settings; 
     if(msettingvalue) 
      settings = new string[]{ 
       "setting1","1", 
       "setting2","apple", 
       ((msettingvalue==true) ? "msetting","true" :)}; 

Se msettingvalue è vero, mi piacerebbe includere due stringhe "msetting", "vero": altrimenti no strings.

Edit1 Non deve essere una coppia di valori chiave ... e se fosse 5 stringhe di essere (o non essere) aggiunti ... Non pensavo che sarebbe stato che difficile.

(anche ... potrebbe qualcuno con abbastanza rep fare una tag "inline-condizionato" o "condizionale-inline"?)

+1

In base all'esempio del codice, msettingvalue sarà sempre true all'interno dell'istruzione di inizializzazione dell'array. –

+1

FWIW, forse un 'Dictionary' o' KeyValuePair [] '(o ...) è più adatto per l'impostazione di coppie? –

+2

Usa un dizionario, ti stai codificando in un angolo qui dove non c'è motivo di farlo affatto. – BrokenGlass

risposta

20
settings = new string[]{"setting1","1", "setting2","apple"} 
    .Concat(msettingvalue ? new string[] {"msetting","true"} : new string[0]); 
    .ToArray() 
+0

@BennorMcCarthy sì, corretto. –

+0

"Brutto, ma funzionerà" +1 ;-) –

+1

@ pst è brutto solo come requisito. Se dovessi definirlo NON userei assolutamente un array di stringhe per memorizzare coppie chiave/valore. Probabilmente sarebbe un 'Dictionary ', nel qual caso è possibile ottenere il valore di impostazione della chiave data su null. –

5

usare un generico List<String>

bool msettingvalue=false; 
string[] settings; 
var s = new List<String>(); 
s.AddRange({"setting1","1","setting2","apple"}); 
if(msettingvalue) 
    s.AddRange({"msetting","true"}); 
settings = s.ToArray(); 

Ma. .. dall'aspetto del tuo array ti conviene utilizzare una struttura diversa per archiviare queste cose. È un array associativo che vuoi. È possibile utilizzare Tuple o per modellare le impostazioni in un modo che sia più facile da gestire e che rifletta in modo più accurato la semantica.

bool msettingvalue=false; 
var settings = new Dictionary<String,String>(); 
settings.Add("setting1","1"); 
settings.Add("setting2","value2"); 
if(msettingvalue) 
    settings.Add({"msetting","true"); 

... le ultime due righe potrebbero anche essere.

settings.Add({"msetting",msettingvalue.ToString()); 
+0

Non vuole usare gli elenchi – GianT971

+0

Non ho visto quello menzionato nella domanda. Ancora no. – Cheeso

+0

Non credo che questa risposta rispetti la parola "in linea" usata nel titolo della domanda ... –