gpt4 book ai didi

c# - 如何抛出异常并添加包含键和值的我自己的消息?

转载 作者:太空狗 更新时间:2023-10-29 22:12:42 24 4
gpt4 key购买 nike

我有如下所示的方法:

public IDictionary<string, string> Delete(Account account)
{
try { _accountRepository.Delete(account); }
catch { _errors.Add("", "Error when deleting account"); }
return _errors;
}

public IDictionary<string, string> ValidateNoDuplicate(Account ac)
{
var accounts = GetAccounts(ac.PartitionKey);
if (accounts.Any(b => b.Title.Equals(ac.Title) &&
!b.RowKey.Equals(ac.RowKey)))
_errors.Add("Account.Title", "Duplicate");
return _errors;
}

我想更改此方法,使其返回一个 bool 值,因此如果出现错误则抛出异常,而不是:

_errors.Add("", "Error when deleting account");

有人可以向我解释如何抛出异常并传递包含键和值的消息。在这种情况下,键是 "",值是 "Error when deleting account"

也在调用它的方法中。我将如何捕获异常?

我是否有必要创建自己的类并以某种方式抛出基于该类的异常?

最佳答案

创建您自己的异常类,它可以保存您需要的数据:

public class AccountException : ApplicationException {

public Dictionary<string, string> Errors { get; set; };

public AccountException(Exception ex) : base(ex) {
Errors = new Dictionary<string, string>();
}

public AccountException() : this(null) {}

}

在您的方法中,您可以抛出异常。也不要返回由异常处理的错误状态。

不要丢弃您在方法中获得的异常,将其包含为 InnerException,以便它可以用于调试。

public void Delete(Account account) {
try {
_accountRepository.Delete(account);
} catch(Exception ex) {
AccountException a = new AccountException(ex);
a.Errors.Add("", "Error when deleting account");
throw a;
}
}

public void ValidateNoDuplicate(Account ac) {
var accounts = GetAccounts(ac.PartitionKey);
if (accounts.Any(b => b.Title.Equals(ac.Title) &&
!b.RowKey.Equals(ac.RowKey))) {
AccountException a = new AccountException();
a.Errors.Add("Account.Title", "Duplicate");
throw a;
}
}

调用方法时,您会捕获异常类型:

try {
Delete(account);
} catch(AccountException ex) {
// Handle the exception here.
// The ex.Errors property contains the string pairs.
// The ex.InnerException contains the actual exception
}

关于c# - 如何抛出异常并添加包含键和值的我自己的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8543264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com