有没有办法转换未处理的异常行,以便"输入字符串"将在"正确" int"格式"?我不记得这种类型的不兼容的隐式转换的工作......在第一个for循环语句中的未处理异常。
public class ArrayTest
{
public static void Main()
{
// initialize array
int[] myArray;
Console.WriteLine("Enter size of an Array");
int arrayVariable = Convert.ToInt32(Console.ReadLine());
myArray = new int[arrayVariable];
Console.WriteLine("Element at index {0}", arrayVariable);
Console.WriteLine("Enter elements of Array");
for (int i = 0; i < arrayVariable; i++)
{
myArray[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arrayVariable; i++)// Display Array Elements
{
Console.WriteLine("Element at index {0} {1}: ", i, myArray[i]);
}
}
}
答案 0 :(得分:0)
Int32.TryParse(string,out int)方法将指定的32位有符号整数的字符串表示形式转换为out变量,如果成功解析则返回true,否则返回false。此方法在C#2.0及更高版本中可用。当s是空引用时,它将返回0而不是抛出ArgumentNullException。如果s不是整数值,则out变量将为0而不是FormatException。当s表示小于MinValue或大于MaxValue的数字时,out变量将为0而不是OverflowException。
success = Int32.TryParse(s1, out result); //-- success => true; result => 1234
success = Int32.TryParse(s2, out result); //-- success => false; result => 0
success = Int32.TryParse(s3, out result); //-- success => false; result => 0
success = Int32.TryParse(s4, out result); //-- success => false; result => 0
Convert.ToInt32优于Int32.Parse,因为它返回0而不是异常。但同样,根据要求,可以使用它。 TryParse将是最好的,因为它总是自己处理异常。
答案 1 :(得分:0)
TryParse
是验证输入类型的选择之一。
public class ArrayTest
{
public static void Main()
{
// initialize array
int[] myArray;
Console.WriteLine("Enter size of an Array");
int arrayVariable = Convert.ToInt32(Console.ReadLine());
myArray = new int[arrayVariable];
Console.WriteLine("Element at index {0}", arrayVariable);
Console.WriteLine("Enter elements of Array");
for (int i = 0; i < arrayVariable; i++)
{
string input = Console.ReadLine();
int result;
if(int.TryParse(input, out result))
{
myArray[i] = result;
}
else
{
i--;
Console.WriteLine("Invalid input format");
}
}
for (int i = 0; i < arrayVariable; i++)// Display Array Elements
{
Console.WriteLine("Element at index {0} {1}: ", i, myArray[i]);
}
}
}