如果布尔值为false或我的条件没有返回任何值,如何调用Catch?

时间:2012-03-01 06:29:16

标签: c#

我只是想知道如何解决我的方案,这是我的代码

 try
            {
                bool b;
                foreach (string file in files)
                {

                    #region donloadfiles
                    if (b = file.Contains(story))
                    {
                        try
                        {
                            logger.Info("calling xml creation Method");
                            baseMeta(story, XML);
                            logger.Info("XML created");
                        }
                        catch (Exception ex)
                        { logger.Error(ex.Message); throw; }

                        logger.Info("calling Download Method");
                        Download(file, story, xml, program);
                        logger.Info("Download Method processed successfully");
                    }
                    #endregion
                }


            }

            catch (Exception ex)
            { logger.Error(ex.Message); throw; }

正如所承诺的,这是我的主要方法包含try catch block

 try
            {

                //update the status here in DB
               Status = "Closed";
               Update(status);
            }

            catch (Exception ex)
            {

                Status = "Failed";
                Update(status);
                break;
            }

我有目录“for eg:C:\”我的getlist方法获取所有记录并将其传递给我的foreach循环“foreach(文件中的字符串文件)”然后我有一个条件

如果(b = file.Contains(story))检查我的任何文件都有“故事”的名称,那么在里面做一些逻辑。这件事情很好。

现在我要做的是,如果没有任何文件匹配,那么我必须强制调用catch并抛出main catch,在主catch中进行一些逻辑更新。

有人请建议我如何解决这个问题。

提前致谢

2 个答案:

答案 0 :(得分:3)

  

我想要做的是,如果没有任何文件匹配,那么我有   强行召唤捕获并投掷到主捕获,我正在做一些   在我的主要捕获中进行逻辑更新。

bool anyMatch = false;

foreach (.....)
{
      if (b = file.Contains(story))
         anyMatch = true;
}

if(!anyMatch)
    throw ... //this will be caught by main catch

将一个bool变量保留在foreach循环之外。如果任何文件匹配,则将其设置为true。如果在foreach循环抛出异常结束时为假

答案 1 :(得分:1)

亚瑟,使用例外来管理流程是一个不错的想法! 例外是管理错误,而不是处理代码执行中的预期条件。

一个更好的方法(从长远来看:相信我这个)就是在没有文件匹配而不是抛出异常时从你的方法中返回一些值。

类似的东西:

  #region donloadfiles
                    if (b = file.Contains(story))
                    {
                        try
                        {
                            logger.Info("calling xml creation Method");
                            baseMeta(story, XML);
                            logger.Info("XML created");
                        }
                        catch (Exception ex)
                        { logger.Error(ex.Message); throw; }

                        logger.Info("calling Download Method");
                        Download(file, story, xml, program);
                        logger.Info("Download Method processed successfully");
                    }

else return "no matches found";
                        #endregion

一旦你找到了#34;没有找到匹配项,就从那里开始处理这个过程"调用此方法的地方的值。