我正在为学校的实验室建立一个数字猜测游戏,游戏的基本规则是你有10个猜测试图猜测1到100之间的数字。我的老师要我把所有的游戏逻辑放在一个类并使用表单类中的btn_Click方法从游戏逻辑类中调用方法。我觉得把try catch放在btn_CLick方法中是有道理的,因为我可以使用MessageBox.show来输出一条消息,比如“你必须输入一个数字”或“那么数字必须介于1和100之间”但是他他说他希望我能够获取代码并在没有表单类的情况下使用它。有什么建议?
答案 0 :(得分:2)
我不会使用try-catch。您可以使用TryParse将输入从字符串转换为整数。如果它不转换只是显示错误。如果它确实转换为整数,你可以做一个if-then,看看它是否在你想要的参数范围内。
这可以通过“逻辑类”中包含的方法完成。你可以让一个方法返回一个true / false,检查输入是否可以是一个整数,另一个方法可以确定它是否在你想要的范围内。
然后,您的UI将获取这些真/假,并显示/不显示您的消息框以显示错误消息。
尝试/捕获是昂贵的,在这种情况下它没用。如果/ thens和输入验证/卫生将解决您可能对此程序的问题。
答案 1 :(得分:1)
我建议不要使用try / catch,除非你真的真的需要它。因此,为了验证用户输入,不要尝试对可能引发异常的值进行类型转换,而是检查输入字符串以查看它是否为整数。如果在C#Library中没有这样做的方法,我会感到惊讶。
答案 2 :(得分:0)
你的游戏逻辑应该不关心你在哪里以及如何得到猜测(数字),所以在游戏逻辑中真的不应该需要try / catch。我想象它会暴露出一个看起来像这样的方法:
public GuessResult MakeAGuess(int guess)
请注意,它需要一个整数来与目标数进行比较。所以这里没什么可扔的。身体可能看起来像这样:
public GuessResult MakeAGuess(int guess)
{
if (guess > target)
return GuessResult.TooHigh;
if (guess < target)
return GuessResult.TooLow;
return GuessResult.Correct;
}
其中GuessResult
是具有enum
,TooHigh
和TooLow
值的公开Correct
。
您的用户界面将负责将字符串转换为数字(如果需要),并且任何尝试/捕获都将在那里完成。但是,最好使用int.TryParse
而不是int.Parse
包装在try / catch中,因为它更有效。更好的方法是在表单上使用更合适的控件来获取用户输入。一个实际上是designed for numbers。