重複の可能性:
最後にブロックが実行されていませんか?
最後にc#でブロックすることについて質問があります。私は小さなサンプルコードを書きました:
public class MyType
{
public void foo()
{
try
{
Console.WriteLine("Throw NullReferenceException?");
string s = Console.ReadLine();
if (s == "Y")
throw new NullReferenceException();
else
throw new ArgumentException();
}
catch (NullReferenceException)
{
Console.WriteLine("NullReferenceException was caught!");
}
finally
{
Console.WriteLine("finally block");
}
}
}
class Program
{
static void Main(string[] args)
{
MyType t = new MyType();
t.foo();
}
}
私の知る限り、例外がスローされたかどうかに関係なく、最終的にブロックは決定論的に実行されると想定しています。ここで、ユーザーが「Y」を入力すると、NullReferenceExceptionがスローされ、実行はキャッチクロックに移動し、次に、予想どおりにfinallyブロックに移動します。ただし、入力が別のものである場合は、ArgumentExceptionがスローされます。この例外をキャッチするのに適したcatchブロックがないため、実行によってfinallyブロックを移動する必要があると思いましたが、そうではありません。誰かが私に理由を説明してもらえますか?
みんな、ありがとう :)