我試圖根據方法中的不同引數獲得不同的例外(ArgumentOutOfRangeException)。CheckParametersAndThrowException3 方法檢查單元 I 和 doubled 是否在范圍內。對我來說,問題是我只得到了 int I 的例外,但沒有得到第二個引數 d 的例外。請讓我知道如何獲得這兩個引數的例外。
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.");
}
}
uj5u.com熱心網友回復:
在您的示例中,永遠不會引發第二個例外。
嘗試這個:
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);
}
uj5u.com熱心網友回復:
你應該只創建不拋出你的兩個例外,然后用它們拋出 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 屬性)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/437708.html
