C# 从上一次递归迭代中读取旧值的递归函数

C# 从上一次递归迭代中读取旧值的递归函数,c#,recursion,C#,Recursion,此代码段从控制台读取输入并返回一个对象。 如果有任何错误,它会再次调用自己 我有验证规则来检查输入值是否不是字母。我的验证器将返回该错误并再次调用该函数以获取正确的输入 以下代码的问题在于: 当我输入错误时,让我们说“abc” 验证程序返回错误并在控制台上打印出来,并请求 新输入 现在,当我提交正确的输入时,比如说12,它抛出一个 分析字符数组时发生FormatException。行: Int32.Parse(positionXY[0].ToString()) 我怎样才能修好它 public

此代码段从控制台读取输入并返回一个对象。 如果有任何错误,它会再次调用自己

我有验证规则来检查输入值是否不是字母。我的验证器将返回该错误并再次调用该函数以获取正确的输入

以下代码的问题在于:

  • 当我输入错误时,让我们说“abc”
  • 验证程序返回错误并在控制台上打印出来,并请求 新输入
  • 现在,当我提交正确的输入时,比如说12,它抛出一个 分析字符数组时发生FormatException。行:
    Int32.Parse(positionXY[0].ToString())
我怎样才能修好它

public MissileCoordinates ReadCoordinates()
{
    PrintLine($"Enter Coordinates", ConsoleColor.White);
    var move = Console.ReadLine();
    List<string> errors = constraintValidator.ValidateMissile(move).ToList();

    if (errors.Any())
    {
        foreach (var error in errors)
        {
            PrintLine(error, ConsoleColor.White);
        }
        ReadCoordinates();
    }
    else
    {
        var positionXY = move.ToCharArray();

        return new MissileCoordinates
        {
            PosX = Int32.Parse(positionXY[0].ToString()),
            PosY = Int32.Parse(positionXY[1].ToString())
        };
    }
    return null;
}
public missioncoordinates ReadCoordinates()
{
打印行($“输入坐标”,ConsoleColor.White);
var move=Console.ReadLine();
List errors=constraintValidator.ValidateMissile(move.ToList();
if(errors.Any())
{
foreach(错误中的var错误)
{
打印行(错误,ConsoleColor.White);
}
ReadCoordinates();
}
其他的
{
var positionXY=move.ToCharArray();
返回新的任务协调
{
PosX=Int32.Parse(positionXY[0].ToString()),
PosY=Int32.Parse(positionXY[1].ToString())
};
}
返回null;
}

您的递归函数应该是:

public MissileCoordinates ReadCoordinates()
{
    PrintLine($"Enter Coordinates", ConsoleColor.White);
    var move = Console.ReadLine();
    List<string> errors = constraintValidator.ValidateMissile(move).ToList();

    if (errors.Any())
    {
        foreach (var error in errors)
        {
            PrintLine(error, ConsoleColor.White);
        }
        return ReadCoordinates();
    }
    else
    {
        var positionXY = move.ToCharArray();

        return new MissileCoordinates
        {
            PosX = Int32.Parse(positionXY[0].ToString()),
            PosY = Int32.Parse(positionXY[1].ToString())
        };
    }
}
public missioncoordinates ReadCoordinates()
{
打印行($“输入坐标”,ConsoleColor.White);
var move=Console.ReadLine();
List errors=constraintValidator.ValidateMissile(move.ToList();
if(errors.Any())
{
foreach(错误中的var错误)
{
打印行(错误,ConsoleColor.White);
}
返回ReadCoordinates();
}
其他的
{
var positionXY=move.ToCharArray();
返回新的任务协调
{
PosX=Int32.Parse(positionXY[0].ToString()),
PosY=Int32.Parse(positionXY[1].ToString())
};
}
}

这里是fiddle

我用你的代码创建了一个fiddle,它运行得很好。你能发布完整的代码吗?你试图给出的输入示例这个方法首先是一个不适合递归的候选者。使用
do
while
循环读取输入会更合适。我同意@jmcilhinneydamn返回关键字:D