编辑:提供更多代码。
我有一个看起来像这样的for循环:
public void SendCommand(string userInput)
{
string[] _command = userInput.Split('#', '>');
string[] _keypress = _command.Where((value, index) => index % 2 == 0).ToArray(); //Even array = Keypress
string[] _count = _command.Where((value, index) => index % 2 != 0).ToArray(); // Odd array = keypress count
int keypressLength = _keypress.GetLength(0);
for (int j = 0; j < keypressLength; j++) //loop through all indices
{
for (int i = 0; i < int.Parse(_count[j]); i++) //repeat convert command for #X times
{
ConvertCommand(_keypress[j]);
Thread.Sleep(100); // wait time after each keypress
}
}
}
使用&#39; try-catch&#39;围绕上面的代码,如果用户输入无效,将通过循环抛出中途异常。但是,我想在循环开始之前捕获错误,我该如何实现呢?
答案 0 :(得分:2)
您可以使用int.TryParse
。它尝试解析字符串并返回true
或false
:
for (int j = 0; j < keypressLength; j++) //loop through all indices
{
int limit;
if (!int.TryParse(_count[j], out limit))
{
// Show an error like "_count[j] cannot be parsed"
continue;
}
for (int i = 0; i < limit; i++)
{
ConvertCommand(_keypress[j]);
Thread.Sleep(100); // wait time after each keypress
}
}
如果用户不断输入错误数据,您可能还希望在ConvertCommand
内实施某种验证。
更新:
例如,_count [0]可以被解析,但_count [1]可以解析,当它捕获到错误时,_count [0]已被处理。如果出现任何错误,我不希望其中任何一个被处理。
您可以使用相同的int.TryParse
并利用LINQ检查_count
中的所有字符串是否都可以解析为整数:
int stub;
if (_count.Any(x => !int.TryParse(x, out stub)))
{
// There is a non-integer string somewhere!
}
for (int j = 0; j < keypressLength; j++) //loop through all indices
{
for (int i = 0; i < int.Parse(_count[j]); i++)
{
ConvertCommand(_keypress[j]);
Thread.Sleep(100); // wait time after each keypress
}
}