c# - 我可以有多个 try block 和一个 catch block 吗

标签 c# exception try-catch

我正在制作一个国际象棋游戏,我只是想知道我是否可以在我的代码中去掉这些空的 catch block ,让同一范围内的所有 try block 都进入一个 catch block ,因为我认为这是开始看起来有点愚蠢和杂乱无章。

我的代码:

for (int i = 1; i < 8; i++)
{
    try
    {
        if (board[x + i, y].Equals(blackColor))
            checkmateList.AddLast(placementBoard[x + i, y]);//Moving Right
    }
    catch
    {

    }

    try
    {
        if (board[x - i, y].Equals(blackColor))
            checkmateList.AddLast(placementBoard[x - i, y]);//Moving Left
    }
    catch
    {

    }

    try
    {
        if (board[x, y + i].Equals(blackColor))
            checkmateList.AddLast(placementBoard[x, y + i]);//Moving Down
    }
    catch
    {

    }
}

我有空的 catch block ,因为我得到的唯一错误是越界异常,因为它会超出范围,所以我只是停止搜索并转到不同的区域,但我认为它看起来很愚蠢,因为大多数我的代码中使这些部分移动的部分由这个组成。

最佳答案

单个 try 有多个 catch 是可能的,而我们不能将一个 catch 用于多次尝试,但是你可以将整个事情包含在一个带有单个 catch 的 Try-Block 中,不需要包含每个在单独的 try block 中声明。更多在获得异常后继续将不是一个好的做法。尝试这样的事情:

 try
 {
    for (int i = 1; i < 8; i++)
    {

       // all conditions and statements here
    }
 }
 catch
 {
      // handle exception here
 }

在这种情况下我们可以期待 IndexOutOfRangeException,而不是等待抛出异常我们可以简单地跳过通过条件语句获取异常的机会,在这种情况下代码应该是这样的:

for (int i = 1; i < 8; i++)
{
    if (x + i < 8 && board[x + i, y].Equals(blackColor))
        checkmateList.AddLast(placementBoard[x + i, y]); //Moving Right

    if (x - i >= 0 && board[x - i, y].Equals(blackColor))
        checkmateList.AddLast(placementBoard[x - i, y]); //Moving Left

    if (y + i < 8 && board[x, y + i].Equals(blackColor))
        checkmateList.AddLast(placementBoard[x, y + i]); //Moving Down
}

关于c# - 我可以有多个 try block 和一个 catch block 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41618834/

相关文章:

c# - 如何像 visual studio 一样将单声道复制数据文件制作到子目录中

c# - 异常在 try/catch 上下文中丢失了部分堆栈跟踪

javascript - 多个独立语句上的 Try-catch block

javascript - 使用 async/await 和 try/catch 进行分层 api 调用

c# - .NET和sql server数据库链接

c# - 我怎样才能映射这个 1 :1 relationship using fluent nhibernate without requiring application level extra enforcement code or a 1:many mapping?

c# - DLL 项目 - 知道哪个环境调用了它吗? (网络/窗口/cmd)

c++ - 如何使 Visual Studio 2013 显示未处理的异常消息?

python - try/finally - Python 在异常时对本地命名空间做了什么?

python - 停止无限 while 循环重复调用 os.system