2013-05-23 7 views
-9
bool isexist = false; 
string mytest="A"; 
foreach (TestClass test in tester) 
    {                 
     if(mytest =="A") 
     { 
      isexist = true; 
     } 
     //rest of the code 
     Methodcall(isexist); 

    } 
public void Methodcall(bool set) 
{ 
    if(set) 
    string +="This is any issue"; 
} 

В коде выше я хочу проверить мое, если состояние только один раз в этом цикле & хочет ЧУК правды только один раз в Methodcall & в следующем цикле я хочу передать ложный каждый раз, когда в methodcall, потому что я хочу для печати Это проблема только один раз.если условие внутри цикла Еогеаспа

+2

Там не появляется, чтобы быть вопрос здесь. Каков твой вопрос? –

+0

Я думаю, вы просто хотите поставить 'break' после назначения isexist в true. – vcsjones

+0

Я предполагаю, что он хочет выйти из цикла foreach, когда выполняется условие isexist = true. – cvraman

ответ

0

Глядя на замечание OP в:

if(tester.contains("A")) 
{ 
    isExist=true; 
} 

foreach (TestClass test in tester) 
{ 
    ... 
} 

Проверка для включения, хотя в зависимости от типа данных это заставит полную итерацию.

+0

Может у помочь немного больше .. – intelliCode

+0

@intelliCode не уверен, что я следую. Я все еще немного потерял ваш первоначальный вопрос. – Woot4Moo

+0

мой простой вопрос: моя петля работает несколько раз, но я хочу проверить мое условие if только один раз внутри цикла ... – intelliCode

0

Есть два возможных решения я могу увидеть здесь:

  1. Вы имеете в виду, чтобы запустить if (mytest == "A") заявление только один раз, что означает, что вы не хотите поместить в петлю. Это само собой разумеется, поскольку правильный цикл будет делать что-то более одного раза, и поскольку mytest оценивается каждый раз, оператор никогда не изменяется. В этом случае ответ Woot4Moo, скорее всего, будет лучшим.

  2. Вы хотели сказать if (test == "A"), который будет оценивать каждый объект TestClass для поиска эквивалентности «A» вместо оценки «mytest» каждый раз.

Опять же, ваш вопрос немного запутан, особенно, поскольку каждая переменная заменена на некоторую форму слова «тест». Возможно, вы могли бы рассказать нам больше о цели кода?

2
bool first = true;// To do the first time 
foreach (TestClass test in tester) 
{ 
    if (first && mytest == "A")// Check if first time 
    { 
     first = false; // To skip the next times 
     isexist = true; 
    } 
    //rest of the code 
    Methodcall(isexist); 

} 

Но, возможно, это то, что вы ищете:

bool bool1 = true; 
foreach (TestClass test in tester) 
{ 
     //rest of the code 
     Methodcall(bool1); 
     bool1 = false; 
} 

?

+1

Это, безусловно, соответствует требованиям OP, но я настоятельно рекомендую не вводить код внутри цикла, если код нужно запускать только один раз. – 4444

+0

@Doc Это неправильная идея, есть много разных ситуаций, которые бы требовали положить что-то внутри цикла, которое нужно выполнить только один раз. Например, что, если цикл читает файл для целочисленных значений и выводит некоторое вычисленное значение в другой файл? Если сбой чтения в строке, вы, скорее всего, захотите вставить сообщение об ошибке * в эту строку *, а не ждать завершения обработки файла. – NominSim

+1

@NominSim Если его нужно запустить только один раз, вы можете просто вызвать его перед запуском цикла. Каждый раз, когда вы видите этот шаблон, это красный флаг. – Servy

0

Я собираю то, что вы действительно ищете, это проверить некоторые условия для каждого члена вашего списка. Если тест не пройден, по крайней мере один раз, вы хотите, чтобы позже вызвать метод внутри для цикла на основе этой неудачи, но тогда не называть его снова в итерации:

bool testFail = true; 
foreach(TestClass test in tester) 
{ 
    bool yourTestCondition = performTest(test); // Your test here. 
    if(testFail && (yourTestCondition)) 
    { 
     testFail = false; 
    } 
    MethodCall(testFail && (yourTestCondition)); 
} 
Смежные вопросы