如果某些輸入大于 7 或小于 0,我正在檢查錯誤例外:
if (number1 > 7 || number1 < 0 || number2 > 7 || number2 < 0){
throw new Exception("Invalid position <pos>");
}
catch (Exception e){
Console.Write(e)
}
我怎樣才能列印出錯誤的數字?例如:number1 是 10 但 number2 是 3,我想列印“無效位置 <10>”
uj5u.com熱心網友回復:
我想知道是否可以在不使用許多 if/elseif 陳述句的情況下檢查 if 陳述句中滿足什么條件。
沒有這樣的方法,你必須拆分你的if。
if (number1 > 7 || number1 < 0 ){
throw new Exception($"Invalid position <{number1}>");
}
elseif(number2 > 7 || number2 < 0) {
throw new Exception($"Invalid position <{number2}>");
}
catch (Exception e){
Console.Write(e)
}
uj5u.com熱心網友回復:
最簡單的方法是將此 if 陳述句拆分為一個 func:
Func<int,int,int,bool> InRange= (number,low,high) =>
{
if(number>high || number<low)
return false;
return true;
}
if(!InRange(number1,0,7))
throw new Exception($"Invalid position <{number1}>");
if(!InRange(number2,0,7))
throw new Exception($"Invalid position <{number2}>");
真的,雖然在像論文這樣的情況下,你的數字應該在某種串列中,所以它更像是:
foreach (var number in numbers)
if(!InRange(number,0,7))
throw new Exception($"Invalid position <{number}>");
你也不應該使用像 0 和 7 這樣的硬編碼數字。它們應該是輸入或設定為常量
uj5u.com熱心網友回復:
如果number1和number2是arguments,您可以單獨驗證它們:
// if number1 and number2 are input parameters, we just validate them:
if (number1 < 0 || number1 > 7)
throw new ArgumentOutOfRangeException(nameof(number1), "Invalid position <pos>");
if (number2 < 0 || number2 > 7)
throw new ArgumentOutOfRangeException(nameof(number2), "Invalid position <pos>");
如果number1和number2是某種設定,您可以利用相同的想法:
// If number1 and number2 are local variables, we have some inner problems
// in the routine. That's why I vote for - InvalidOperationException -
// something when wrong
if (number1 < 0 || number1 > 7)
throw new InvalidOperationException(
$"Invalid position <pos>, {nameof(number1)} = {number1} is out of [0..7] range.");
if (number2 < 0 || number2 > 7)
throw new InvalidOperationException(
$"Invalid position <pos>, {nameof(number2)} = {number2} is out of [0..7] range.");
請注意,投擲和捕捉(吞咽)Exception通常是一種不好的做法:您的代碼應該只在number1或number2超出范圍時處理簡單的情況,而不是處理所有可能的例外情況。
如果你想寫一些警告并繼續做,你可以完全擺脫例外拋出:
if (number1 > 7 || number1 < 0)
Console.Write($"Invalid position <pos>: {nameof(number1)} is out of range");
else if (number2 > 7 || number2 < 0)
Console.Write($"Invalid position <pos>: {nameof(number2)} is out of range");
else {
// Both number1 and number2 are valid
}
uj5u.com熱心網友回復:
一個簡單的解決方案,與throw其他解決方案相反:
if (number1 > 7 || number1 < 0 || number2 > 7 || number2 < 0)
{
var invalidNumbers = new List<string>();
if(number1 > 7 || number1 < 0)
{
invalidNumbers.Add($"{number1}");
}
if (number2 > 7 || number2 < 0)
{
invalidNumbers.Add($"{number2}");
}
throw new Exception($"Invalid position {string.Join(", ",invalidNumbers)}");
}
如果number1,或number2,或兩者number1并number2都錯了,您是通過一個唯一的例外通知。
如果您的條件對于每個數字都相同,正如您可能暗示的那樣:
如果某些輸入大于 7 或小于 0
您可以使用 Linq 輕松概括并獲得更優雅的代碼:
var number1 = 8;
var number2 = -1;
var numbers = new List<int>
{
number1,
number2
// Add as many numbers as you wish.
};
var wrongNumbers = numbers
.Where(n => n > 7 || n < 0) // The condition to apply to all numbers.
.ToList();
if(wrongNumbers.Any())
{
var wrongNumbersAsString = string.Join(", ", wrongNumbers
.Select(n => $"{n}"));
throw new Exception($"wrong numbers: {wrongNumbersAsString}");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/389117.html
上一篇:55 道MySQL基礎題
