цикл условного foreach c # - PullRequest
1 голос
/ 05 августа 2009

Как я могу это сделать? (c #) В принципе, я хочу быть в состоянии сортировать, закомментировать скобки. но не совсем. Думаю, я хочу закрыть скобки не по порядку. Это, вероятно, не возможно. Очевидно, я могу реализовать это в отдельных разделах if, но это значительно облегчит мой код.

PS: Я пытаюсь поместить код "// делать что-то" либо в цикл foreach, либо для отдельного экземпляра с несвязанным (с циклом foreach) аргументом, в зависимости от на условии. Надеюсь, это поможет прояснить ситуацию.

псевдокод ( что я пытаюсь сделать, если вы можете закрыть скобки не по порядку ):

я знаю, что это не где-то рядом с действительным кодом, это псевдокод, как я сказал.

я еще не посмотрел второй пост, но первый пост (Шон Брайт), спасибо, но условие не связано с количеством записей (в каталоге всегда будут файлы, независимо от того, хочу ли я цикл для выполнения)

извлечение кода // dosomething в функцию будет работать. Я не уверен, как я это упустил. Полагаю, мне было интересно, если есть более простой способ, но вы правы. спасибо.

if (isTrue)
{
    //START LOOP
    string [] fileEntries = Directory.GetFiles(LogsDirectory, SystemLogFormat);
    foreach(string fileName in fileEntries)
    {
       using (StreamReader r = new StreamReader(fileName))
       {
    /* The previous two blocks are not closed */
}
else
{
    using (StreamReader r = new StreamReader(SingleFileName))
    {
    /* The previous block is not closed */
}

// do all sorts of things

if (isTrue)
{
    /* Close the two unclosed blocks above */
        }
    }
}
else
{
    /* Close the unclosed block above */
    }
}

спасибо!

(отступы странные, извините, это делают форумы)

Ответы [ 3 ]

6 голосов
/ 05 августа 2009

Преобразуйте часть обработки файла в отдельную функцию:

public void OriginalFunction() {
    if ( isTrue ) {
        string [] fileEntries = Directory.GetFiles(LogsDirectory, SystemLogFormat);
        foreach(string fileName in fileEntries) {
            ProcessFile(fileName);
        }
    } else {
        ProcessFile(SingleFileName);
    }

}

public void ProcessFile( string name ) {
    using (StreamReader r = new StreamReader(name))
    {
       // Do a bunch of stuff
    }
}
6 голосов
/ 05 августа 2009

Почему бы просто не сделать это:

string [] fileEntries = null;

if (isTrue) {
    fileEntries = Directory.GetFiles(LogsDirectory, SystemLogFormat);
} else {
    fileEntries = new string [] { SingleFileName };
}

foreach(string fileName in fileEntries) {
    using (StreamReader r = new StreamReader(fileName)) {
        /* Do whatever */
    }
}
0 голосов
/ 05 августа 2009

Используйте условное выражение, чтобы определить, как вы собираетесь создать StreamReader, а затем передайте его в using (), как обычно.

...