如何在c#中获取多个参数的多个异常

How to get multiple exception for multiple parameters in c#

我正在尝试根据方法中的不同参数获取不同的异常 (ArgumentOutOfRangeException)。 CheckParametersAndThrowException3 方法检查 unit I 和 doubled 是否在范围内。对我来说,问题是我只得到 int I 的异常,但第二个参数没有异常 d.Please 让我知道如何获得这两个参数的异常。

  public static bool CheckParametersAndThrowException3(uint i, double d)
    {

        if ((i >= 0 && i < 5) && (d < 1.0 && d >= -1.0))
        {
            return true;
        }
        else
        {
            throw new ArgumentOutOfRangeException(nameof(i), "i should be in [0, 5) interval.");
            throw new ArgumentOutOfRangeException(nameof(d), "d should be in [-1.0, 1.0] interval.");
        }
    }

在您的示例中,永远不会抛出第二个异常。

试试这个:

    static bool CheckRange1 (int x, double y)
    {
        (bool xOK, string xName, string xMsg) = x >= 0 && x < 5 ? (true, "", "") : (false, "x", "x should be in [0, 5)");
        (bool yOK, string yName, string yMsg) = y >= -1.0 && y <= 1.0 ? (true, "", "") : (false, "y", "y should be in [-1.0, 1.0]");
        if (xOK && yOK)
        {
          return true;
        }
        string separator = "";
        if (!xOK && !yOK) 
        {
          separator = ", ";
        }
        throw new ArgumentOutOfRangeException(xName + separator + yName, xMsg + separator + yMsg);
    }

或者不抛出异常:

static (bool ok, string msg) CheckRange2(int x, double y)
{
    (bool xOK, string xMsg) = x >= 0 && x < 5 ? (true, "") : (false, "x should be in [0, 5)");
    (bool yOK, string yMsg) = y >= -1.0 && y <= 1.0 ? (true, "") : (false, "y should be in [-1.0, 1.0]");
    if (xOK && yOK)
    {
        return (true, "");
    }
    return (false, xMsg + (!xOK && !yOK ? ", " : "") + yMsg);
}

你应该只创建不抛出你的两个异常然后抛出 AggregateException 与他们

像这样

public static void Main(string[] args)
{
    var firstEx = new ArgumentOutOfRangeException("error msg 1");
    var secondEx = new ArgumentOutOfRangeException("error msg 2");
    throw new AggregateException(firstEx, secondEx);
}

调试时,异常将如下所示(注意 InnerExceptions 属性)