0

同じタイプの例外を発生させるこのクラスを取得しました。この例外をキャプチャして適切なエラーメッセージを表示するにはどうすればよいですか。これが私が今していることです。

public bool ChangePassword(oldPassword,newPassword)
{

  if(oldPassword != savedInDatabase)
{
  throw new ArgumentException("Your old password is not same as one saved in our database")
}

  if(string.IsNullOrEmpty(oldPassword) || string.IsNullOrEmpty(newPassword))
{
 throw new ArgumentException("Your old or new password is empty of null");
}

}

そして私は以下を行います、

try
{
}
catch(ArgumentException ex)
{
 if(ex.Message.contains("Your old or"))
{
  messagebox.show("Either your old or new password is empty or null")
}
...
}
4

3 に答える 3

2

さまざまな例外タイプをスローすることを検討してください。ライブラリの例外タイプを使い続けたいArgumentNullException場合は、古いパスワードまたは新しいパスワードがnullまたは空であれば適切です。または、より具体的なエラー(おそらくWCFのFaultExceptionsに類似)を使用して独自の例外タイプを定義するか、カスタム例外にリソース識別子を含めることを検討することもできます(I18Nとの互換性を確保するため)。

public class ResourceableException : Exception
{
  public string ResourceKey { get;set; }
}

次に、そのように使用されます:

try { ... }
catch (ResourceableException e)
{
  messagebox.Show(ResourceManager.GetResource(e.ResourceKey));
}
于 2012-01-16T13:01:48.017 に答える
2

あなたの例は、カスタム例外を実際に正当化するものではありません。元のメッセージを表示するだけです。

ただし、本当にカスタム例外のパスをたどりたい場合は、別のオプションとして、次のenumようなすべての異なるオプションを使用する単一のカスタム例外を作成します。

public class PasswordException : Exception
{
    public PasswordException(PasswordResult result) : base() { }
    public PasswordException(PasswordResult result, string message) : base(message) { }
    public PasswordException(PasswordResult result, string message, Exception innerException) : base(message, innerException) { }
}

public enum PasswordResult
{
    Success = 0,
    PasswordMismatch,
    PasswordEmpty,
    // and so forth
}
于 2012-01-16T13:19:54.670 に答える
1

次のようなカスタム例外を作成できます。

public class PasswordEmptyOrNullException : Exception
{
    public PasswordEmptyOrNullException(string message)
        : base(message)
    {

    }
}

public class OldPasswordNotFoundException : Exception
{
    public OldPasswordNotFoundException(string message)
        : base(message)
    {

    }
}

その後、次のように使用できます。

throw new PasswordEmptyOrNullException("A message");

次に、次のようなtrycatchステートメントでそれらを処理できます。

try
{
}
catch (PasswordEmptyOrNullException ex)
{
    // Do stuff
}
catch (OldPasswordNotFoundException ex)
{
    // Do stuff
}

したがって、さまざまな種類の例外をさまざまな方法で処理できます。それがあなたが探していたものであることを願っています。

于 2012-01-16T13:08:52.090 に答える