【问题标题】:conditional foreach loop c#条件foreach循环c#
【发布时间】:2010-11-16 19:28:45
【问题描述】:

我该怎么做? (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 */
    }
}

谢谢!

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

【问题讨论】:

  • 好吧,你把我弄丢了
  • “有点,注释掉一个括号”是什么意思?你到底想让你的代码做什么?我可以告诉你,“注释掉一个括号”或括号不匹配是行不通的(因为编译器会阻塞),但我们需要更多信息来解决你遇到的问题。
  • 该伪代码是您正在尝试执行的操作的示例,还是您要解析的代码类型的示例?
  • 我试图编辑大括号,却发现它在语法上有效的代码附近没有。您的 using 语句中的第一项是不匹配的 else
  • 你想做什么?读取目录中的所有文件?

标签: c# loops conditional


【解决方案1】:

为什么不这样做:

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

【讨论】:

  • +1 这就是我昨天解决类似问题的方法
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 2012-08-25
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多