2010-08-13 18 views
5

Mam tablicę ciągów znaków. Potrzebuję wyświetlać przyciski na podstawie, czy wybrany element znajduje się w tablicy. Muszę wiedzieć, jak powiedzieć programowi, jeśli "(tablica: NOT Zawiera (" ciąg znaków "))". Proszę, czy ktoś może mi pomóc? góry dziękiJeśli element ciągu nie znajduje się w tablicy ciągów znaków

Mój kod:

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

Musisz zrozumieć logiczną logiki lepiej - 'if/else if/else' skonstruować masz nie ma sensu z warunków testu masz. – Oded

Odpowiedz

2

! oznacza "NIE". Musisz więc umieścić go przed wyrażeniem, które musisz zanegować;

!activationids.Contains("blahblah");

Jednak jest to dość oczywiste, że jeśli activationids.Contains("blahblah") jest false, masz zamiar iść do drugiej sprawy. Ponadto, twój trzeci blok (... else { ...) nigdy nie zostanie trafiony.

10

Zmiana:

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

do

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

Istnieją dwa bardzo proste sposoby, aby to zrobić:

  1. Nie wynikiem połączenia bool funkcji:

    if(!activationids.Contains(gvselectActID))

  2. sprawdzić wynik i porównać go do false

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


Jednak jest sprawdzana, jeśli zawiera ona go w pierwszym if() klauzuli, co oznacza, że ​​pierwszy else Klauzula zostanie zwolniona, jeśli nie jest zawarta. Nie ma potrzeby sprawdzania i nie ma mowy, aby trzeci else kiedykolwiek został zwolniony.

2

Zawiera zwraca prawdę lub fałsz, sou nie można mieć trzy oddziały, można to zrobić tylko

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

nie istnieją inne możliwości

[żart]
dobrze mógłby działać w tym wypadku
http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
[/ kawał]

+0

if (x) {doSomething();} else if (! X) {doSomethingElse();} else {throw new LogicalBoundsOfUniverseExceededException();} (choć ściśle, jeśli x jest zmieniany z zewnątrz przez inny wątek, trzeci warunek może być trafiony). –

1

będzie to wystarczy:

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; 
} 

Nie ma innych możliwych opcji - nie może być trzeciego oddziału.

To nie ma sensu:

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

As z definicji, jeśli booleanCondition jest fałszywy, gałąź jeszcze zostaną podjęte - nie ma potrzeby, aby przetestować to jest fałszywe.

6

Albo jeszcze prościej

bool containsItem=activationids.Contains(gvselectActID); 

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

+1: Chociaż nie odpowiada konkretnie na to pytanie, jest to najlepsze podejście do przykładowego kodu jako całości. – cjk

Powiązane problemy