4

私は今静かにグーグルで検索しましたが、どのシナリオでどの例外を使用するかまだわかりません。独自のコードで発生させるのは悪い習慣だと読んだことがSystemExceptionsあります。これらの例外は CLR によって発生させる方がよいからです。

Exeptionでもまあ、今はさまざまなシナリオで何を上げるべきか知りたいです。パラメータとして列挙型で呼び出されるメソッドがあるとしましょう。これはあまり良い例ではありません。頭の中で思い浮かんだだけです。

public enum CommandAppearance
{
    Button,
    Menu,
    NotSpecified
}

//...

public void PlaceButtons(CommandAppearance commandAppearance)
{
    switch(commandAppearance)
    {
        case CommandAppearance.Button:
            // do the placing
        case CommandAppearance.Menu:
            // do the placing
        case CommandAppearance.NotSpecified:
            throw ArgumentOutOfRangeException("The button must have a defined appearance!")
    }
}

ここは何でしょう?概要を知ることができるサイトはありますか?どのような例外を発生させるべきかを示すパターンはありますか? 私はこれにかなり自信がないので、このトピックでいくつかのヒントが必要です。

sだけ上げるのも良くないと思いますnew Exception()よね?

4

2 に答える 2

2

ArgumentOutOfRangeExceptionこれには最高の組み込み例外があると確信しています。ReSharperもそれを提案しています。
別のものが必要な場合.. 唯一の方法は、新しい特別な例外を作成すること CommandAppearanceIsNotSpecifiedExceptionです。

于 2012-04-25T11:13:09.450 に答える
1

あなたのシナリオ例では、次のいずれかをお勧めします。

  • ArgumentOutOfRangeExceptionメソッドが列挙型のすべての値をサポートし、無効な値が渡された場合。
  • NotSupportedExceptionメソッドが列挙型の値のサブセットをサポートしている場合。

一般的に言えば、例外タイプを利用したいと考えています。可能な場合は.netフレームワークの例外のリストを参照してください。それが理にかなっています。これには、アプリケーションの一般的なアプリケーション例外の追加と、それを継承するより具体的な例外の追加が含まれる場合があります。

例えば

public class MyAppException : Exception
{
    // This would be used if none of the .net exceptions are appropriate and it is a 
    // generic application error which can't be handled differently to any other 
    // application error.
}

public class CustomerStatusInvalidException : MyAppException
{
    // This would be thrown if the customer status is invalid, it allows the calling
    // code to catch this exception specifically and handle it differently to other 
    // exceptions, alternatively it would also be caught by (catch MyAppException) if 
    // there is no (catch CustomerStatusInvalidException).
}
于 2012-04-25T11:24:30.643 に答える