4

対応するエラーコードを取得する方法はありExceptionsますか?メッセージの代わりにスローされた例外エラーコードが必要なので、エラーコードに基づいて、ユーザーに適切なメッセージを表示します。

4

3 に答える 3

8

あなたがwin32エラーコードを探しているなら、それはWin32Exceptionクラスで利用可能です

catch (Win32Exception e)
{  
    Console.WriteLine("ErrorCode: {0}", e.ErrorCode);
}

単純な古いCLR例外の場合、整数のエラーコードはありません。

あなたが説明する問題を考えると、例外のタイプごとにリソース文字列を取得するためのミリムースのソリューションを使用します。

于 2013-03-17T15:45:38.770 に答える
5

例外の全体的なポイントは、単なるエラーコードよりも豊富な情報を提供することです。デフォルトでは、1つはなく、実際には必要ありません。エラーコードを使用したい場合は、すべての例外を派生させる独自の例外基本クラスを使用できます。

public abstract class MyExceptionBase : Exception 
{
    public int ErrorCode { get; set; }
    // ...
}

そうは言っても、私は気にしません。個人的には、タイプ名を使用して例外をエラーメッセージにマップします。

ResourceManager errorMessages = ...;
errorMessages.GetString(ex.GetType().FullName);

(リソースに文字列をフォーマットさせ、例外プロパティをそれらに補間するなど、より柔軟なスキームを作成することもできます。)

于 2013-03-17T15:47:34.290 に答える
3

管理対象例外にアップグレードされたCOM例外の場合、プロパティから「エラーコード」を次のように取得できます。HResult

try {
    // code goes here
} catch(System.IO.FileNotFoundException ex) {
    Console.WriteLine(
        String.Format("(HRESULT:0x{1:X8}) {0}",
                      ex.Message,
                      ex.HResult)
    );
}

ただし、すべての例外に意味のあるHResultセットがあるわけではありません。


.NET 3.0、3.5、および4.0の場合、リフレクションを使用して、HResultマークされているプロパティの値を取得する必要がありprotectedます。

于 2013-03-17T15:47:40.450 に答える