C#-如果语句为真,请尝试两次

C#-如果语句为真,请尝试两次,c#,C#,我有一个解析网站并向列表中添加一些值的代码。有时我需要对网站进行两次解析,然后将第二个解析值添加到同一个列表中 以下是一些代码: public async Task<IEnumerable<Info>>.... { var values = new List<Info>(); var request = something; var request_rewritten = rewritten request to run the second time; ..

我有一个解析网站并向列表中添加一些值的代码。有时我需要对网站进行两次解析,然后将第二个解析值添加到同一个列表中

以下是一些代码:

public async Task<IEnumerable<Info>>....
{
var values = new List<Info>();
var request = something;
var request_rewritten = rewritten request to run the second time;
......
if request contains something do all the under two times. Both for the request and the rewritten request and add it to result. 
......
var response = await RequestBytes(request);
var results = Encoding.GetEncoding("iso-8859-1").GetString(response.Content);
_fDom = results;

   try
   {
   do something and a lot of code
   ......
   values.Add(result);
   return result
   }
}
公共异步任务。。。。
{
var值=新列表();
var请求=某物;
var request_rewrited=第二次运行的重写请求;
......
如果请求包含某些内容,则对请求和重写的请求执行下面两次操作,并将其添加到结果中。
......
var响应=等待请求字节(请求);
var results=Encoding.GetEncoding(“iso-8859-1”).GetString(response.Content);
_fDom=结果;
尝试
{
做一些事情和大量的代码
......
值。添加(结果);
返回结果
}
}

如果请求包含我需要的内容,请再试一次。同时用于原始请求和重写请求,并将两者添加到结果中。这能做到吗

我想如果你不想写一个方法(这是你问题的最佳答案),你可以使用一个标志:

bool bRunAgain = true;

while (bRunAgain)
{
   // Your logic, check result and see if you need to run it again

   if (your condition to run again == false)
   {
      bRunAgain = false;
   }
}

我想如果你不想写一个方法(这是你问题的最佳答案),你可以使用一个标志:

bool bRunAgain = true;

while (bRunAgain)
{
   // Your logic, check result and see if you need to run it again

   if (your condition to run again == false)
   {
      bRunAgain = false;
   }
}

你可以遵循这个模式。向方法中添加一个额外的参数,指示剩余的重试次数

void DoSomething(arg1, arg2, int retriesRemaining = 0)
{
    try
    {
        DoWork();
    }
    catch
    {
        if (retriesRemaining) DoSomething(arg1, arg2, --retriesRemaining);
    }
}

你可以遵循这个模式。向方法中添加一个额外的参数,指示剩余的重试次数

void DoSomething(arg1, arg2, int retriesRemaining = 0)
{
    try
    {
        DoWork();
    }
    catch
    {
        if (retriesRemaining) DoSomething(arg1, arg2, --retriesRemaining);
    }
}

这里有一个共同的解决方案。将操作传递到此方法并指定重试次数

public bool ExecuteWithRetry(Action doWork, int maxTries=1) {
   for(var tryCount=1; tryCount<=maxTries; tryCount++){
      try{
         doWork();
      } catch(Exception ex){
         if(tryCount==MaxTriex){
            Console.WriteLine("Oops, no luck with DoWork()");
            return false;
         }
      }
      return true;
   }
}

此解决方案可用于任何需要重试选项的情况,用于具有任何类型参数(或没有参数)的方法。

这里是一个常见的解决方案。将操作传递到此方法并指定重试次数

public bool ExecuteWithRetry(Action doWork, int maxTries=1) {
   for(var tryCount=1; tryCount<=maxTries; tryCount++){
      try{
         doWork();
      } catch(Exception ex){
         if(tryCount==MaxTriex){
            Console.WriteLine("Oops, no luck with DoWork()");
            return false;
         }
      }
      return true;
   }
}

此解决方案可用于任何需要重试选项的情况,用于具有任何类型参数(或没有参数)的方法。

将其放入一个方法将代码放入另一个方法,然后调用该方法两次?一种常见的计算机编程策略是将一个问题划分为与原始问题类型相同的子问题,解决这些子问题,并将结果结合起来。这通常被称为分而治之的方法;当与存储解决子问题的结果的查找表(以避免重复解决它们并导致额外的计算时间)相结合时,它可以被称为动态规划或记忆。我有点猜测您想要实现什么。你能提供更具体的细节吗?正如我说的,我正在用搜索字符串解析一个网站。类似于:www.website.com/?search=æøå。由于将这些字符替换为æ=ae、ø=o、å=aa的语言和模式,我需要将此url搜索到:www.website.com/?search=aeoaa。然后将两个结果合并。将其放入一个方法将代码放入另一个方法,然后调用该方法两次?一种常见的计算机编程策略是将一个问题分成与原始问题类型相同的子问题,解决这些子问题,并将结果合并。这通常被称为分而治之的方法;当与存储解决子问题的结果的查找表(以避免重复解决它们并导致额外的计算时间)相结合时,它可以被称为动态规划或记忆。我有点猜测您想要实现什么。你能提供更具体的细节吗?正如我说的,我正在用搜索字符串解析一个网站。类似于:www.website.com/?search=æøå。由于将这些字符替换为æ=ae、ø=o、å=aa的语言和模式,我需要将此url搜索到:www.website.com/?search=aeoaa。然后将这两个结果结合起来。问题海报是否表明不想写一个方法?对OP问题的两个评论都表示要创建一个方法,只是提供另一个解决方案,不想在评论中写代码块问题海报上是否说明不想写方法?对OP问题的两条评论都表示要创建一个方法,只是提供另一个解决方案,并且不想在评论中写代码块