2011-10-17 8 views
10

¿Cómo podría hacer el siguiente condicional en línea para una matriz de cadena [] en C#. En función de un parámetro, me gustaría incluir un conjunto de cadenas ... o no. Esta pregunta es un seguimiento de this one on stackoverflow.C# condicional en línea en cadena [] matriz

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

Si msettingvalue es cierto, me gustaría incluir dos cadenas "msetting", "verdadero": de lo contrario no hay cuerdas.

Edit1 No tiene que ser un par de valores clave ... ¿y si fuera 5 cuerdas a ser (o no ser) que se añade ... No pensé que sería que difícil.

(también ... podría alguien con representante suficiente hacer una etiqueta "inline-condicional" o "condicional-inline"?)

+1

Según su muestra de código, msettingvalor siempre será verdadero dentro de esa declaración de inicialización de la matriz. –

+1

FWIW, tal vez un 'Diccionario' o' KeyValuePair [] '(o ...) es más adecuado para establecer pares? –

+2

Usa un diccionario, estás codificando en una esquina aquí donde no hay ninguna razón para hacer esto en absoluto. – BrokenGlass

Respuesta

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

@BennorMcCarthy sí, corregido. –

+0

"Feo, pero funcionará" +1 ;-) –

+1

@pst es tan feo como el requisito dado. Si tuviera que definirlo, definitivamente NO usaría una matriz de cadenas para almacenar pares clave/valor. Probablemente sería un 'Diccionario ', en cuyo caso puede salirse con la configuración de valor para la clave dada a nulo. –

5

usar un genérico 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(); 

Pero. .. desde el aspecto de su matriz, sería mejor usar una estructura diferente para almacenar estas cosas. Es una matriz asociativa que deseas. Puede usar Tuple o Dictionary para modelar las configuraciones de una manera que sea más fácil de manejar y que refleje con mayor precisión la semántica.

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

... las últimas dos líneas podrían incluso serlo.

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

Él no quiere usar las listas – GianT971

+0

No vi eso mencionado en la pregunta. Todavía no. – Cheeso

+0

No creo que esta respuesta respete la palabra "en línea" utilizada en el título de la pregunta ... –