从已经具有返回类型的方法中获取错误

时间:2014-06-11 15:03:11

标签: c# error-handling single-responsibility-principle

我有一种尝试创建大量用户帐户的方法。如果成功,则返回用户ID列表,否则我需要获取错误列表。实现这一目标的最佳途径是什么?

以下是我已实施的精简版本:

public class RXGAdapter {

    private List<string> _errors;

    public IEnumerable<int> CreateAccounts(string username, int quantity) 
    {
        ResetErrors();

        var accountIDs = new List<int>();

        for (int i = 1; i <= quantity; i++) 
        {
            int accountID = CreateAccount(username + i);
            if (_errors.Count > 0)
            {
                return new List<int>();
            }
            accountIDs.Add(accountID);
        }
        return accountIDs;
    }

    public int CreateAccount(string username) 
    {
        try {
            // Make HTTP request to the server
            // Parse the ID from of the response if successful
            return id;
        }
        catch (WebException e) 
        {
            // Parse the errors from the response if unsuccessful
            _errors.AddRange(errors);
            return -1;
        }
    }

    public void ResetErrors() 
    {
        _errors = new List<string>();   
    }

    public bool HasErrors() 
    {
        return _errors.Count > 0;
    }

    public IEnumerable<string> Errors 
    {
        get { return _errors; }     
    }
}

我担心这会打破SRP。

1 个答案:

答案 0 :(得分:1)

您可以抛出自定义异常,其中包含错误列表作为自定义异常的属性。

另一种方法是,如果允许您更改CreateAccounts函数签名,则可以在列表中返回每个帐户创建的状态,作为CreateAccounts函数的out参数。