43072
タイトルの件、エラーコードをExceptionをラップした型に持たせて、  
ロジックでエラーが発生した場合に、ロジック利用アプリ側にそのエラーコードにより  
処理を分ける仕組みを検討しております。

この場合、エラーコードを利用アプリでハードコーディングしないように  
管理することを検討しております。以下の方法を検討しておりますが  
ノウハウ等ありましたらご教示頂きたく、よろしくお願いいたします。

1.Enum型でエラーコード数分定義する。エラーコード自体はカスタムタグに持たせる。

```

    public enum ErrorType
    {
        [ErrorEnum("ERROR-0001")]
        Error1,
        [ErrorEnum("ERROR-0002")]
        Error2
    }
    
```

エラーコードの利用コード  

```

    ※GetCode(Enum)はEnum型からコードを返すメソッドとする。
    if(CustomException.ErrorCode == GetCode(ErrorType.Error1))
    {
        //エラーコードに沿ったエラーメッセージを表示する。
    }
    else
    if(CustomException.ErrorCode == GetCode(ErrorType.Error2))
    {
       //エラーコードに沿ったエラーメッセージを表示する。
    }
    
```

2.定数クラスを作成して、public const stringでエラーコードを定義する。

```

    public class ErrorConst
    {
        public const string Error1Code = "ERROR-0001";
        public const string Error2Code = "ERROR-0002";
    }
    
```

エラーコードの利用コード

```

    if(CustomException.ErrorCode == ErrorConst.Error1Code )
    {
        //エラーコードに沿ったエラーメッセージを表示する。
    }
    else
    if(CustomException.ErrorCode == ErrorConst.Error2Code )
    {
        //エラーコードに沿ったエラーメッセージを表示する。
    }
    
```

3.その他何か良い方法や上記方法の注意点等ありましたらご教示ください。
CC BY-SA 3.0
2018-03-19T07:25:38.567
42486
2018-04-08T22:58:49.613
2018-03-27T11:13:50.093
9228
9228
question
c#
C# エラーコードの管理ノウハウ
そもそも「エラーコード」が文字列である必要性を感じないのですが、単純な enum だと参照ライブラリーのバージョン次第で (間に挿入する可能性があるから)
数値比較扱いだとダメという話でしょうか?  
1 のパターンは Enum.GetName() を利用するのを複雑化しているだけに見えるのですが……。

Error1 や Error2 では「名前がどのようなエラーなのかを適切に通知できない」という話が根本的にありますので、素直に enum
でエラーのパターンごとに定義する方が素直に見えます。扱いも簡単ですし。  
また、const での定義は列挙しようとするとコストが高く (リフレクションで拾う形になりますよね?) ついてしまいます。

それこそ "ORA-nnnn" 的に対応したいのであれば、宣言する enum を int (デフォルト) 型扱いとし、エラーコードの値を int
扱いで固定した上で「当該値を読め」だけで良く、敢えて文字列比較する形はあまり意味が無いように思います。  
それこそ ex.ErrorCode == (int)SomeErrorType.Error2 とかでいけますし。

enum のまま扱った方がメッセージカタログを作成する上でも Dictionary とかに突っ込みやすい気もしますが。
CC BY-SA 3.0
2018-04-08T22:58:49.613
43072
2018-04-08T22:58:49.613
13613
42486
answer