0

try...catch と try....finally の違いは? asp.net(C#)で

1/0 のようなエラーをキャッチしたい場合のように、try ブロックにコードを入れ、response.write("ERROR:"+ ex.Message) のように例外オブジェクトを catch ブロックに入れますが、アドバイザーはそれは良くないと言いましたいつもcatchを入れる練習、通知せずにエラー吸収????? えっ?しかし、それは ex.Message を介して行われたので、なぜですか? そして、try....finally は何をしますか? リソースを解放するために使用されることは知っていますが、例外をキャッチできない場合、TRY はどのような用途に使用されますか?

4

3 に答える 3

1

finally は、例外の有無にかかわらず常に実行されます。これは、何かがクリーンアップされたことを絶対に確信したい場合に便利です。

void ReadFile(int index)
{
    // To run this code, substitute a valid path from your local machine 
    string path = @"c:\users\public\test.txt";
    System.IO.StreamReader file = new System.IO.StreamReader(path);
    char[] buffer = new char[10];
    try
    {
        file.ReadBlock(buffer, index, buffer.Length);
    }
    catch (System.IO.IOException e)
    {
        Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
    }

    finally
    {
        if (file != null)
        {
            file.Close();
        }
    }
    // Do something with buffer...
}

finally がないと、エラーが発生した場合にファイルが適切に閉じられない可能性があります。エラーが発生するかどうかに関係なく、完了したらファイルを閉じる必要があります。

別の方法を検討してください。

void ReadFile(int index)
{
    // To run this code, substitute a valid path from your local machine 
    string path = @"c:\users\public\test.txt";
    System.IO.StreamReader file = new System.IO.StreamReader(path);
    char[] buffer = new char[10];
    try
    {
        file.ReadBlock(buffer, index, buffer.Length);
        file.Close();
    }
    catch (System.IO.IOException e)
    {
        Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
    }
}

エラーが発生した場合ReadBlock、ファイルは適切に閉じられません。

于 2013-10-29T23:13:13.920 に答える