此代码段从控制台读取输入并返回一个对象。 如果有任何错误,它将再次调用自身。
我有验证规则来检查输入值是否不是字母。我的验证程序正在返回该错误,然后再次调用此函数以获取正确的输入。
以下代码的问题是:
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;
}
答案 0 :(得分:1)
您的递归函数应该是:
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())
};
}
}