捕获未处理的异常并停止方法?

时间:2017-05-04 14:39:47

标签: c#

在Windows窗体应用程序中,类的List<>将由方法检查,其返回类型为bool。

示例如果有100个类,只有1个类返回false,那么它的另一个字段(Reqbool)将是fals e。当所有课程都Reqbool返回时,true只有true

有没有简单的方法可以解决这个问题?它表示异常未处理,每个false返回它显示消息框。

bool Reqbool = true;
bool MiniReqbool;
if(MiniReqbool == false) { throw new Exception(); }
try
{
    for (int i = 0; i < ImportList.Count; i++)
    {
        MiniMiniTest mitest = new MiniMiniTest();
        MiniReqbool = mitest.ReqTest(ImportList[i], QValue);
    }
}
catch (Exception)
{
    Reqbool = false;
    MessageBox.Show("Sorry points not found");
}

2 个答案:

答案 0 :(得分:2)

在try catch之前抛出异常。如果在检查后放置if语句,则应该修复它。

bool Reqbool = true;
bool MiniReqbool;

try
{
    for (int i = 0; i < ImportList.Count; i++)
    {
        MiniMiniTest mitest = new MiniMiniTest();
        MiniReqbool = mitest.ReqTest(ImportList[i], QValue);
        if(MiniReqbool == false) { throw new Exception(); }
    }
}
catch (Exception)
{
    Reqbool = false;
    MessageBox.Show("Sorry points not found");
}

正如评论中所建议的那样,没有例外情况这样做会更好,这仍然可以像你这样工作一样完成。

bool Reqbool = true;
bool MiniReqbool = true;

for (int i = 0; i < ImportList.Count; i++)
{
    MiniMiniTest mitest = new MiniMiniTest();
    if(!mitest.ReqTest(ImportList[i], QValue)) { MiniReqbool = false; }
}
if (MiniReqbool == false)
{
    Reqbool = false;
    MessageBox.Show("Sorry points not found");
}

答案 1 :(得分:2)

只有当Reqbool中的所有项目都返回false ImportList时,您才想将true设置为mitest.ReqTest。在这种情况下,您可以使用Linq和扩展方法All

MiniMiniTest mitest = new MiniMiniTest();
Reqbool = ImportList.All(il => mitest.ReqTest(il, QValue));

如果您想要每件新MiniMiniTest项,可以使用以下内容:

for (int i = 0; i < ImportList.Count; i++)
{
    MiniMiniTest mitest = new MiniMiniTest();
    if (!mitest.ReqTest(ImportList[i], QValue))
    {
        Reqbool = false;
        break;
    }
}

或使用foreach循环使其更简单:

foreach (var item in ImportList) //...

请注意以下代码:

bool MiniReqbool;
if(MiniReqbool == false) { throw new Exception(); }

总是会抛出异常,因为bool的默认值为false,所以我认为这不是您的实际代码。