C# 如何避免If/Then语句检查其;如果;

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

我想知道是否有人知道如何避免在下面的代码中重新运行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_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…)
我一直在想如何让它退出循环,但这是在后台线程中运行的。所以我必须计时?或者我可以创建一个只触发一次的事件?但我相信这会