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