在开始循环之前捕获错误

时间:2015-12-11 08:50:16

标签: c# for-loop try-catch

编辑:提供更多代码。

我有一个看起来像这样的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;围绕上面的代码,如果用户输入无效,将通过循环抛出中途异常。但是,我想在循环开始之前捕获错误,我该如何实现呢?

1 个答案:

答案 0 :(得分:2)

您可以使用int.TryParse。它尝试解析字符串并返回truefalse

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
    }
 }