我该怎么做? (c#)基本上,我希望能够排序,注释掉括号。但不是真的。我想我想要不按顺序关闭括号。这可能是不可能的。我显然可以在完全独立的if子句中实现它,但这会大大减轻我的代码。
PS:我正在尝试在foreach循环中放置“// do something”代码,或者为与具有不相关(对于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 */
}
}
谢谢!的
(缩进很奇怪,对不起,论坛在做什么)
答案 0 :(得分:6)
为什么不这样做:
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 :(得分:6)
将文件处理部分重构为一个单独的函数:
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
}
}
答案 2 :(得分:0)
使用条件来确定如何创建StreamReader,然后像往常一样在using()中传递它。