我需要写一个Try-Catch-Finally。 首先是编程新手。 回到问题。
在Try-Block中,我想打开一个不存在的文本。
在Catch-Block中,Messagebox应该显示FileNotFoundException。
我仍然不知道我应该把什么放在最后一块。
shouldBe7
由于
答案 0 :(得分:0)
最后是始终执行的代码。我会说使用finally块来清理可能存在的任何东西是一种常见的模式。例如,如果您有文件流...
对不起,如果类型不正确,我目前没有C#,但模式仍然存在......
FileStream file;
try {
file = new FileStream("example.txt", FileMode.Open);
file.open();
}
catch (Exception ex) {
//message box here
}
finally {
// Clean up stuff !
if (file != null) {
file.close()
}
}
答案 1 :(得分:0)
catch 和最终的常见用法是在尝试块中获取和使用资源,处理 catch 阻止,并释放 finally 块中的资源。有关详细信息,请查看https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/try-catch-finally
由于您只想捕获异常然后打印出一条消息,您可以简单地删除 finally 块,就像那样:
try
{
using (FileStream File = new FileStream("beispiel.txt", FileMode.Open)){}
}
catch (FileNotFoundException fnfex)
{
//MessageBox with fnfex
MessageBox.Show(fnfex.Message);
}
使用语句可确保对象在超出范围时立即处理,并且不需要显式代码或最终以确保对象发生的情况。
答案 2 :(得分:0)
最后用于保证做某事的方法,即使抛出异常也是如此。在你的情况下,你可以例如处理你的流,但通常最好对实现IDisposable的对象使用using语句,所以你可以这样做
using (var stream = new FileStream(...))
{
// do what ever, and the stream gets automatically disposed.
}
请参阅:
答案 3 :(得分:0)
DialogResult result;
try
{
FileStream File = new FileStream("beispiel.txt", FileMode.Open);
}
catch (FileNotFoundException fnfex)
{
result =
MessageBox.Show(
this,
// Message: show the exception message in the MessageBox
fnfex.Message,
// Caption
"FileNotFoundException caught",
// Buttons
MessageBoxButtons.OK,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.RightAlign);
}
finally
{
// You don't actually NEED a finally block
}
答案 4 :(得分:-1)
除了人们已经说过的关于尝试...抓住...最终阻止,我相信你正在寻找的是
try {
file = new FileStream("example.txt", FileMode.Open);
file.open();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
但是你需要在项目中添加对System.Windows.Forms的引用并将using语句添加到你的类中
using System.Windows.Forms;
或者,如果您只想在控制台中显示消息,可以使用
Console.WriteLine(e.Message);
并忘记参考