繁体   English   中英

有条件的foreach循环C#

[英]conditional foreach loop c#

我怎样才能做到这一点? (c#)基本上,我希望能够排序一下,在括号中注明。 但不是真的。 我想我想将方括号括起来。 那可能是不可能的。 我显然可以在完全独立的if子句中实现此功能,但这将大大减轻我的代码的负担。

PS:我试图根据条件将“ //做某事”代码放置在foreach循环中,或者将单个实例与不相关(与foreach循环的参数)相关联。 我希望这有助于清除它。

伪代码如果您无法按顺序将方括号括起来,我会尝试这样做 ):

我知道这附近没有有效的代码,正如我所说的是伪代码。

我还没有看过第二篇文章,但是第一篇文章(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 */
    }
}

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

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()中传递它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM