2017-09-06 10 views
0

私はカスタム例外を作成しようとしていますが、このカスタム例外が行う必要があるのは、例外のメッセージを変更するだけですが、元の例外のすべての属性があります。パラメータを使用してカスタム例外を作成する

メッセージは、送信するパラメータに基づいて変更されるという考えがあります。

public class ServiceDireccionException : Exception 
{ 

    public ServiceDireccionException(string type) : base(GetMessage(type)) { } 

    public enum TypeOfService 
    { 
     Provincia, 
     Municipio, 
     Localidad 
    } 

    private static string GetMessage(string type) 
    { 
     string message = ""; 

     switch (type) 
     { 
      case nameof(TypeOfService.Provincia): 
       message = ("Sucedio un error al buscar la/s" + TypeOfService.Provincia.ToString() + "/s"); 
       break; 

      case nameof(TypeOfService.Municipio): 
       message = ("Sucedio un error al buscar lo/s" + TypeOfService.Municipio.ToString() + "/s"); 
       break; 

      case nameof(TypeOfService.Localidad): 
       message = ("Sucedio un error al buscar la/s" + TypeOfService.Localidad.ToString() + "/es"); 
       break; 
     } 

     return message; 
    } 

} 

私は引数を渡すことはできませんtry catchでそれを使用したい:

catch (ServiceDireccionException ex) //<-- It does not prompt me to pass a string. 
    { 
     throw ex; 
    } 
+5

'catch'がある*ありません*例外がインスタンス化される場所...そしてBTWでは、文字列ではなくコンストラクタに列挙型を渡す必要があります。 –

+0

代わりに 'throw'ステートメントがインスタンス化される正しい場所です。だからどこで例外がスローされるのか調べてみましょう。 – HimBromBeere

答えて

1

あなたは

throw new ServiceDireccionException(TypeOfService.Provincia); 

のようにそれを使用するだろうが、そのため、あなたは変更する必要がありますコンストラクタのパラメータ型を

に設定します。
public ServiceDireccionException(TypeOfService type) : base(GetMessage(type)) { } 

は、それがメッセージの使用を取得するため、コンストラクタはなり

public ServiceDireccionException(Exception innerException, TypeOfService type) 
    : base(GetMessage(type), innerException) 
{ 
} 

のようなものを、内部例外

catch (ServiceDireccionException ex) 
{ 
    throw new ServiceDireccionException(ex, TypeOfService.Provincia); 
} 

を含まなければならない情報を保持するために

private static string GetMessage(TypeOfService type) 
{ 
    switch (type) 
    { 
     case TypeOfService.Provincia: 
      return $"Sucedio un error al buscar la/s {type}/s"; 

     case TypeOfService.Municipio: 
      return $"Sucedio un error al buscar lo/s {type}/s"; 

     case TypeOfService.Localidad: 
      return $"Sucedio un error al buscar la/s {type}/es"; 
    } 

    return $"Unknown TypeOfService: {type}"; 
} 
+0

私はこれを試して、メッセージを保存しません – user3442470

+0

@ user3442470:GetMessage()の更新版を試してください。 –

関連する問題