2017-08-17 24 views
-2

以下のコードに示すように、キャストに依存することなくエラーコードを抽出するにはどうすればよいですか?スクリーンショットでは、NumberはオブジェクトInnerExceptionのプロパティですが、アクセスできません。InnerExceptionからSqlExceptionエラー番号を抽出する

try 
{ 
    // db call 
} 
catch (Exception exc) 
{ 
    // Works 
    var q = exc.InnerException as SqlException; 
    var ErrorCode = q.Number; 
    // Not possible 
    var err = exc.InnerException.Number; 
} 

なぜこれはできないのですか?また、InnerException Numberプロパティのドキュメントはどこにありますか?また

enter image description here

+0

キャストなしではできません。なぜあなたはそれをキャストできませんか? – maembe

+0

InnerException NumberプロパティはSqlExceptionのプロパティなので、1行で番号を取得する場合は、 '((SqlException)exc.InnerException).Number' –

+0

@maembeと記述されているようにキャストすることができますコードコメント – usefulBee

答えて

1

、のInnerException Numberプロパティのドキュメントを見つけるには?

このプロパティはSqlExceptionクラスのメンバーです。それはhereと記載されています。

クラスExceptionクラスではないため、そのクラスのメンバであるため、何らかのキャストの形式を使用せずに直接アクセスすることはできません。 (Exception.InnerExceptionExceptionと定義されていますが、SqlExceptionではありません)。ただし、キャストする方法について特に気に入らないものがある場合は、キャストとタイプチェックに関連するいくつかの構文があります活用したいあなたの現在のアプローチはどうですか?

+1

私はこのアプローチについて嫌いなことは何もありません。これは、ドメイン知識と(あなたのコメントの1つで説明した)デバッガの役割の組み合わせであり、不完全な質問をするために私を押しました。ディスカッションはオープンドアであり、それは人々が学び成長する一つの方法です。 – usefulBee

関連する問題