C# 如何避免If/Then语句检查其;如果;
我想知道是否有人知道如何避免在下面的代码中重新运行if语句C# 如何避免If/Then语句检查其;如果;,c#,if-statement,for-loop,C#,If Statement,For Loop,我想知道是否有人知道如何避免在下面的代码中重新运行if语句 int x = 1; load_page(standurl, 0); firstentryOnload = UrlList[0]; for (int i = 1; i <= lastPage; i++) { if (UrlList.Count > setting_EPP) table_populate(0); System.Threading.Thread.Sleep(delay); load_pag
int x = 1;
load_page(standurl, 0);
firstentryOnload = UrlList[0];
for (int i = 1; i <= lastPage; i++)
{
if (UrlList.Count > setting_EPP) table_populate(0);
System.Threading.Thread.Sleep(delay);
load_page(standurl, i);
if (x > 10)
{
//refresh firstpage,check for new data
System.Threading.Thread.Sleep(delay);
x = 1;
}
x++;
}
intx=1;
加载页面(标准URL,0);
firstentryOnload=UrlList[0];
对于(int i=1;i设置_EPP)表_填充(0);
系统。线程。线程。睡眠(延迟);
加载页面(标准URL,i);
如果(x>10)
{
//刷新首页,检查新数据
系统。线程。线程。睡眠(延迟);
x=1;
}
x++;
}
我想运行表_填充(0);当UrlList.Count>设置\u EPP时没有“If/Then”检查每个循环 本质上,我希望它运行If语句一次,然后停止存在 我知道如何停止if/then语句的运行,但我不希望它在运行后继续检查
编辑:循环在后台运行,目前运行大约需要4小时才能完成。我一直在试图找到一些方法把这个循环之外,但我没有太多的运气。我唯一能想到的就是在运行上述代码的线程旁边运行另一个线程,每隔几分钟运行一次If语句?您可以在委托中包装条件,并在满足条件时替换委托:
Action check;
check = ()=> {
if (UrlList.Count > setting_EPP)
{
table_populate(0);
check = () => {}; // replace check with no-op.
}
};
....
for(...)
{
check();
...
}
此代码由经过培训的专业人士在封闭课程上编写,请勿在家尝试(或任何非自学代码)。:)
更传统的模式——有一个标记,上面写着“条件满足,不再检查”——但实际上它需要if
语句
注意:如果此代码检查共享日期,则需要使用
锁定
或其他同步方法(即并发集合之一)。您可以在委托中包装条件,并在满足条件时替换委托:
Action check;
check = ()=> {
if (UrlList.Count > setting_EPP)
{
table_populate(0);
check = () => {}; // replace check with no-op.
}
};
....
for(...)
{
check();
...
}
此代码由经过培训的专业人士在封闭课程上编写,请勿在家尝试(或任何非自学代码)。:)
更传统的模式——有一个标记,上面写着“条件满足,不再检查”——但实际上它需要if
语句
注意:如果此代码检查共享日期,则需要使用
锁定
或其他同步方法(即并发集合之一)。首先,我要指出,条件表达式的两侧似乎不受循环体的影响;也就是说,在循环体期间,urlist.Count
和setting\u EPP
似乎都不会改变。load\u page()
或table\u populate()
函数可能会更改某些内容,或者另一个线程会更改某些内容,但现在我假设这是真的,因为这个问题在其他方面似乎没有多大意义(我保证:有条件的检查不是你表现的一个重要或可测量的因素)
鉴于此,问题仍然不清楚,但我有两种可能性。一种是,您只需要在循环开始时加载表。这很简单;在进入循环体之前调用它:
int x = 1;
load_page(standurl, 0);
firstentryOnload = UrlList[0];
if (UrlList.Count > setting_EPP) table_populate(0);
for (int i = 1; i <= lastPage; i++)
{
System.Threading.Thread.Sleep(delay);
load_page(standurl, i);
if (x > 10)
{
//refresh firstpage,check for new data
System.Threading.Thread.Sleep(delay);
x = 1;
}
x++;
}
当然,您可以将大部分重复代码抽象为一个单独的方法
事实上,还有第三种可能性。我可能是错的,在循环过程中,某些东西会发生变化urlist
或setting\u EPP
,您只想在条件第一次变为真时运行它,而无需在每次迭代时进行检查。在这种情况下,您可以执行以下操作:
int i = 1;
while (i <= lastPage && UrlList.Count <= setting_EPP)
{
System.Threading.Thread.Sleep(delay);
load_page(standurl, i);
if (i % 10 == 0) System.Threading.Thread.Sleep(delay);
i++;
}
if (i <= lastPage && UrlList.Count > setting_EPP) table_populate(0);
while (i <= lastPage)
{
System.Threading.Thread.Sleep(delay);
load_page(standurl, i);
if (i % 10 == 0) System.Threading.Thread.Sleep(delay);
i++;
}
inti=1;
而(i我首先要指出的是,条件表达式的两侧似乎都不受循环体的影响;也就是说,urlist.Count
和setting\u EPP
在循环体期间似乎不会发生变化。load\u page()
或table\u populate()
函数改变了一些东西,或者另一个线程改变了一些东西,但现在我假设这是真的,因为这个问题在其他方面似乎没有多大意义(我保证:条件检查不是性能的一个重要或可测量的因素)
鉴于此,问题仍然不清楚,但我有两种可能性。一种是,您只需要在循环开始时加载表。这很简单;在进入循环体之前调用它:
int x = 1;
load_page(standurl, 0);
firstentryOnload = UrlList[0];
if (UrlList.Count > setting_EPP) table_populate(0);
for (int i = 1; i <= lastPage; i++)
{
System.Threading.Thread.Sleep(delay);
load_page(standurl, i);
if (x > 10)
{
//refresh firstpage,check for new data
System.Threading.Thread.Sleep(delay);
x = 1;
}
x++;
}
当然,您可以将大部分重复代码抽象为一个单独的方法
事实上,还有第三种可能性。我可能是错的,在循环过程中,某些东西会发生变化urlist
或setting\u EPP
,您只想在条件第一次变为真时运行它,而无需在每次迭代时进行检查。在这种情况下,您可以执行以下操作:
int i = 1;
while (i <= lastPage && UrlList.Count <= setting_EPP)
{
System.Threading.Thread.Sleep(delay);
load_page(standurl, i);
if (i % 10 == 0) System.Threading.Thread.Sleep(delay);
i++;
}
if (i <= lastPage && UrlList.Count > setting_EPP) table_populate(0);
while (i <= lastPage)
{
System.Threading.Thread.Sleep(delay);
load_page(standurl, i);
if (i % 10 == 0) System.Threading.Thread.Sleep(delay);
i++;
}
inti=1;
while(你不能直接从循环中取出逻辑吗?将if
语句移到循环之外?if(urlist.Count>设置\u EPP)表填充(0);for(int i=0…)
我一直在想如何让它退出循环,但这是在后台线程中运行的。所以我必须计时?或者我可以创建一个只触发一次的事件?但我相信这只会导致我使用另一个if语句。代码永远运行,直到程序关闭或到达最后一页(大约11200页,大约每1.3秒(约4小时)一页,如果您有其他问题没有包含在您的问题中,请将您的问题提交给我们,这样我们就不会浪费时间试图帮助您处理不完整的信息。System.Threading.Thread.Sleep(x++%10?0:延迟)?难道不能将逻辑从循环中取出吗?将if
语句移到循环之外?if(urlist.Count>设置\u EPP)表\u填充(0);for(int i=0…)
我一直在想如何让它退出循环,但这是在后台线程中运行的。所以我必须计时?或者我可以创建一个只触发一次的事件?但我相信这会