2009-06-24 10 views
1

私は、CastleProjectの実装で "Release Candidate"という指定よりも、自分のコードを恐れのない会社のActiveRecord実装をもう一つ書いています。とにかく、私は戻って、データセットの列にマップするために、基本クラスの各プロパティに属性を使用しています:この状況で.Net 2.0の例外を投げるべきですか?

[ResultColumnAttribute("CUST_FIRST_NAME")] 
public string FirstName 
     { 
      get { return _columnName; } 
      set { _columnName = value; } 
     } 

私は、データセットからのクラスをインスタンス化するとき、私はプロパティの値列の値ことを割り当てるようにします。列が属性にマップされているにもかかわらず、データセットに表示されない場合、どのような例外をスローする必要がありますか?私は行きたいとカスタム(怠惰な)を書くことを望んでいない、と私は思うApplication.Exception少しノンスクリプトです。

+1

この質問をするのに時間が掛かりましたが、カスタム例外 – AgileJon

答えて

8

この例外は、あなたのドメインにローカライズされています。あなた自身がInvalidMappingExceptionを書くのが良いと思います。ここで

私はそれを書くだろうかです:

[Serializable] 
public class InvalidMappingException : Exception 
{ 
    public InvalidMappingException() { } 

    public InvalidMappingException(String message) 
     : base(message) { } 

    public InvalidMappingException 
     (String message, Exception innerException) 
      : base(message, innerException) { } 

    protected InvalidMappingException 
     (SerializationInfo info, StreamingContext context) 
      : base(info, context) { } 
} 
+1

+1を書くことができました。カスタム例外は書き込みに数秒かかるため、「良い」例外処理のために非常に役立ちます。 –

+0

同意します。これは、独自のカスタム例外が必要な状況です。 +1 –

+0

私は誰もカスタム例外のT4テンプレートを作成していないことに驚いています。 –

0

まず第一に、城ウィンザーは正式今バージョン2である、ないのリリース候補:)

私は内の例外の限られたセットがあると思います

  • NotImplementedException
  • と、InvalidOperationException:.NETフレームワークは、あなたが本当にあなたのコードから投げることができます
  • ArgumentExceptionが
  • 例外ArgumentNullException

以上があるかもしれない、私は他の記事のために期待しています。それらのどれも適合しない場合は、あなた自身で書く必要があります。 Visual Studioの "exc"コードスニペットでは、遅延は実際には議論ではありません。

+0

ルート "Exception"をアサートとして扱い、スローさせることができます。 – Joshua

1

あなたの実装に固有のカスタム例外を記述します。これは非常に特殊化されたカスタマイズされた状況であり、カスタム例外はおそらく他のどのものよりもよく適合します。私に

は、この例では、(lazy)は、それが正当だ時にカスタム例外を作るために必要なコードの少し、ほんの少しを追加することを避けるために良い十分な理由ではありません...

0

はあなただけべきであることに合意しましたあなた自身のことを書いてください(ちょうど例外をタイプし、Tabを押すとエディタが2/3の仕事をします!)、もしそうでなければ、おそらくArgumentExceptionに行きます。

2

私はInvalidOperationExceptionを使用しない理由はありません。あなたの呼び出し元があなたの例外を使ってプログラム的なことをしない限り、例外の型は関係ありません。たとえば、明示的にキャッチしようとしている場合、または例外の一部のプロパティを参照している場合、独自のものが必要です。

それ以外の場合、組み込みの例外は問題ありません。


クシシュトフ・クワリーナ、Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Librariesの共著者でHow to Design Exception Hierarchiesを参照してください。

+0

リンクされた参照のための+1 –

1

"throw new Exception"は正式には無効なスタイルなので、すべてのエラーに対してInvalidOperationException( "記述的メッセージ")を投げます。カスタムエラーを書くのが面倒です。

+0

@Matthew:あなたは新しい例外をスローするのが見えますか? –

+0

それはスタイルがそんなにありません、それはどこにでもあります... – Sekhat

+0

FxCopはそれのために刑務所にあなたを投げます;) – womp

関連する問題