2009-05-18 5 views
10

C#オブジェクトイニシャライザブロックの例外をデバッグするためのヒントがありますか?オブジェクトイニシャライザの構文は、基本的にすべてまたは何もないため、LINQクエリの内部でのトラブルシューティングを特に困難にする可能性があります。オブジェクトの作成を別のメソッドに分割するのは短く、どのプロパティセッターが例外をスローしているのか見るためにできることはありますか?C#オブジェクトイニシャライザのデバッグ

答えて

13

プロパティ設定ツールをステップオーバーするオプションを無効にすると、[プロパティをステップオーバーして演算子(管理対象のみ)]を使用してプロパティセッターに入ることができます。

それ以外の場合は、LINQ文の外でデバッグしてデバッグすることをお勧めします。初期化パラメータをlinqの匿名型にラップし、linq文の外側にオブジェクトを作成してデバッグすることができます。

+0

「初期化パラメータを匿名型にラップする」という意味を説明できますか?私は何らかの形でコンストラクタに匿名型を渡すか、プロパティを割り当てるユーティリティファクトリメソッドを作成するだけですか? – technomalogical

+0

今、そのサウンドから、クエリ結果を使用してオブジェクトを構築しています。オブジェクト構造上でエラーが発生していると考えられます。代わりに、クエリ結果を返すだけで、結果を使用して別のステップでオブジェクトを構築するので、オブジェクトイニシャライザブロックを回避できます。 –

+0

しかし、何とか匿名型をコンストラクタに渡すことは可能ですか? – wcm

1

個々のプロパティを個別に設定するオブジェクトイニシャライザブロックから分割します。そうすれば、実際にコードに入ることができます。

4

例外がスローされたときにブレークするようにVSを設定しましたか? (デフォルトでは、未処理の例外のみが中断されます)。デバッグ|例外をチェックし、 "投げられる"をチェックする。

それだけではおそらくあなたの質問に対する答えではありませんが、デバッグに役立つかもしれません。

それを超えると、一時的にコードをイニシャライザブロックから外して(デバッグのためだけに)、必要に応じてコードが動作した後でイニシャライザブロックを元に戻すことができます。