Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条件foreach循环c#_C#_Loops_Conditional - Fatal编程技术网

条件foreach循环c#

条件foreach循环c#,c#,loops,conditional,C#,Loops,Conditional,我该怎么做?(c#)基本上,我希望能够对括号进行注释。但不是真的。我想我想把括号括起来。这可能是不可能的。显然,我可以在完全独立的if子句中实现这一点,但这将大大减轻我的代码 p.S.:我正在尝试将“//do something”代码放置在foreach循环中,或者放置在具有不相关(与foreach循环的参数无关)参数的单个实例中,具体取决于条件。我希望这有助于澄清问题 伪代码(我正在尝试做的事情,如果您可以按顺序关闭括号): 我知道这是无效代码,正如我所说的是伪代码。 if (isTrue)

我该怎么做?(c#)基本上,我希望能够对括号进行注释。但不是真的。我想我想把括号括起来。这可能是不可能的。显然,我可以在完全独立的if子句中实现这一点,但这将大大减轻我的代码

p.S.:我正在尝试将“//do something”代码放置在foreach循环中,或者放置在具有不相关(与foreach循环的参数无关)参数的单个实例中,具体取决于条件。我希望这有助于澄清问题

伪代码(我正在尝试做的事情,如果您可以按顺序关闭括号):

我知道这是无效代码,正如我所说的是伪代码。

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 */
    }
}
我还没有看过第二篇文章,但是第一篇文章(Sean Bright),谢谢,但是条件与条目的数量无关(无论我是否希望执行循环,目录中总是会有文件)

将//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 */
    }
}
谢谢

(缩进很奇怪,抱歉,这是论坛在做的)

为什么不这样做:

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 */
    }
}
为什么不这样做:

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 */
    }
}

将文件处理部分重构为单独的函数:

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

将文件处理部分重构为单独的函数:

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

使用您的条件来确定如何创建StreamReader,然后像正常情况一样将其传递到using()中。

使用您的条件来确定如何创建StreamReader,然后像正常情况一样将其传递到using()中。

好吧,您失去了meBy“有点像,注释掉一个括号”,这是什么意思?你到底想让你的代码做什么?我可以告诉你,“注释掉一个括号”或者括号不匹配是行不通的(因为编译器会阻塞),但是我们需要更多的信息来解决你遇到的问题。伪代码是你试图做的一个例子吗,或者您想要解析的代码类型的示例?我试图编辑大括号,但发现它没有接近语法有效代码的地方。using语句中的第一项是一个不匹配的
else
。您想做什么?读取目录中的所有文件?好吧,你把我弄丢了“有点,注释掉一个括号”,你是什么意思?你到底想让你的代码做什么?我可以告诉你,“注释掉一个括号”或者括号不匹配是行不通的(因为编译器会阻塞),但是我们需要更多的信息来解决你遇到的问题。伪代码是你试图做的一个例子吗,或者您想要解析的代码类型的示例?我试图编辑大括号,但发现它没有接近语法有效代码的地方。using语句中的第一项是一个不匹配的
else
。您想做什么?读取目录中的所有文件?+1这是我昨天处理类似问题的方法+1这是我昨天处理类似问题的方法