2010-08-13 7 views
5

Tengo una matriz de cadenas. Necesito mostrar botones basados ​​en si el elemento seleccionado está en la matriz. Necesito saber cómo decirle al programa si "(array NOT contains (" string "))". Por favor, ¿alguien puede ayudarme? Gracias de antemanosi el elemento de cadena no está en el conjunto de cadenas

Mi código:

List<string> activationids = new List<string>(); 
    foreach (ModuleActivation moduleactivation in activationid) 
     activationids.Add(moduleactivation.ActivationID); 

    string gvselectActID = GridView1.SelectedRow.Cells[1].Text; 

    if (activationids.Contains(gvselectActID)) 
    { 
     activateInsert.Visible = true; 
     activateUpdate.Visible = false; 
     deactivate.Visible = true; 
    } 
    else if (activationids."NOT" Contains(gvselectActID)) 
    { 
     activateInsert.Visible = false; 
     activateUpdate.Visible = true; 
     deactivate.Visible = false; 
    } 
    else 
    { 
    activateInsert.Visible = false; 
    activateUpdate.Visible = false; 
    deactivate.Visible = false; 
    } 
    } 
+0

Es necesario comprender mejor la lógica booleana - el 'if/else if/else' construir usted tiene no tiene sentido con la condición de prueba que tiene. – Oded

Respuesta

2

El ! significa "NO". Entonces debes colocarlo frente a la expresión que necesitas negar;

!activationids.Contains("blahblah");

Sin embargo, es bastante claro que si activationids.Contains("blahblah") es false, usted va a entrar en el segundo caso. Además, actualmente, su tercer bloque (... else { ...) nunca será golpeado.

10

Cambio:

else if (activationids."NOT" Contains(gvselectActID)) 

a

else if (!activationids.Contains(gvselectActID)) 
2

Hay dos maneras muy sencillas de hacer esto:

  1. No es el resultado de la llamada bool función:

    if(!activationids.Contains(gvselectActID))

  2. Comprobar el resultado y compararlo con false

    if(activationids.Contains(gvselectActID) == false)


Sin embargo, se está comprobando si contiene en primer if() cláusula, lo que significa que el primer else cláusula se disparará si no está contenida. No es necesario verificarlo, y no hay manera de que se active el tercer else.

2

contiene retornos de verdadero o falso, sou no se puede tener tres ramas, se puede hacer casi

if (activationids.Contains(gvselectActID)) // it does contain 
    ... 
else // it does not contain 
    ... 

no hay otras posibilidades

[broma]
así que podría funcionar en este caso
http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
[/ broma]

+0

if (x) {doSomething();} else if (! X) {doSomethingElse();} else {throw new LogicalBoundsOfUniverseExceededException();} (aunque estrictamente, si x se cambia desde el exterior por otro hilo, la tercera condición podría ser golpeado). –

1

Esto será suficiente:

if (activationids.Contains(gvselectActID)) 
{ 
    // Goes here if condition is true 
    activateInsert.Visible = true; 
    activateUpdate.Visible = false; 
    deactivate.Visible = true; 
} 
else 
{ 
    // Goes here if condition is false 
    activateInsert.Visible = false; 
    activateUpdate.Visible = true; 
    deactivate.Visible = false; 
} 

No hay otras opciones posibles: no puede haber una tercera rama.

Esto no tiene sentido:

if(booleanCondition) 
{} 
else if (!booleanCondition) 
{} 
else 
{} 

Como por definición, si el booleanCondition es falsa, la rama más va a ser tomada - no hay necesidad de probar para que sea falsa.

6

O aún más simple

bool containsItem=activationids.Contains(gvselectActID); 

activateInsert.Visible = containsItem; 
activateUpdate.Visible = !containsItem; 
deactivate.Visible = containsItem; 
+1

+1: Si bien no responde específicamente la pregunta, es el mejor enfoque para el código de muestra como un todo. – cjk

Cuestiones relacionadas