如何在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 属性)
我正在尝试根据方法中的不同参数获取不同的异常 (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 属性)