我正在制作一个国际象棋游戏,我只是想知道我是否可以在我的代码中去掉这些空的 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/