2012-03-05 5 views
1

throwキーワードを取得できません、なぜそれを使用しますか?それのメリットは何ですか?C#なぜエラーをスローする

try 
{ 
    Classreference.MethodToRun(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString(), "Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 
} 

これは動作しますが、私は私が代わりにエラーをスローし、私のUIクラスでそれをキャッチ呼び出しています方法を作ることができthrowと推測:

は、今のところ、私は私のUIクラスでこれを持っています?しかし、なぜ?それについては何が良いですか?クラスをよりオブジェクト指向にするか、それとも何にするか?私は私の呼び出し元のメソッドを変更する場合、コードを変更する必要はありません私のUIクラスでエラーをキャッチすると推測している代わりに変更されているメソッドでエラーメッセージを変更する?

+2

Google "C#例外処理のベストプラクティス"を読んで、可能な限りすべての記事を読んでください。 – asawyer

+0

ガー!近くのフェストの狂気の人々を停止してください!これは実際の質問です...その中にいくつかのコードがあります。本当に有益な答えがここにあります。 – Josh

+0

@Josh - 編集履歴を見てください。質問はまず理解できませんでした。 – Oded

答えて

1

エラーが発生したことを示すためにthrowを使用します。または、既存のエラーを上位レベルに引き渡します。

エラー(例外)を処理する場合は、catchを使用します。

例外をスローすることは、エラーコードを返す古いエラーを処理する従来の手続き的な方法よりも改善されています。

単純な成功例のロジックを書くことができますし、何かがうまくいかない場合は、単純に例外をスローします。下位レベルのコードではエラー処理がありません。特定の例外がスローされたときに何をすべきかを決定するのは、アプリケーションの上位レベルまでです。

+0

これはまさに私が探していた短く、主題のポイントでした。ありがとう。 – Gvs

0

キーワードthrowを使用すると、上位のメソッドに対する例外をスローすることができます。

この方法を使用すると、データベースアクセスを終了するなどの例外をよく使用することができます。

0

あなたがここでやっていることは、例外から得ることができる多くの情報を効果的に隠すことです。 あなたが定期的にやりたいことは、例外をキャッチし、それを見直すことができる場所(ログファイル、db、イベントログ)に関連情報を記録してから、スタックトレースをそのまま維持するthrow()技術的な実装を隠している「ユーザーフレンドリーな」例外があります。

0

asawyerが正しいです、あなたはGoogleにエラー処理のために読んでください、それは広い主題であり、あなたは実際にそれを実践し、話し、そして読んだ後に本当にしか得ません。 throwは、あまり頻繁に使用する必要はないかもしれませんが、不要な動作を止めたり、メソッドを使用しているプログラマのエラーを明確にするために使用することがあります。私はそれが非常に不自然である知っているが、この例を取る:

public string WriteToFile(FileStream fs) { 
    if (fs == null) { 
    throw new ApplicationException("you passed a null filestream"); 
    } 

    // write to file 
} 

あなたはそれを検証せずに、ファイルにFileStreamを書くしようとする可能性があり、そうすることで、あなたの方法を消費する人のために、より分かりやすいエラーを作成します。

関連する問題