用户输入初始化数组示例和隐式转换
user input initialized array example and implicit conversion
有没有办法转换未处理的异常行,以便 "Input string" 将在 "correct" int "format" 中?我不记得这种类型的不兼容隐式转换的解决方法...第一个 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]);
}
}
}
Int32.TryParse(string, out int)方法将指定的32位有符号整数的字符串表示形式等价于out变量,return解析成功则为true,否则为false。此方法在 C# 2.0 及更高版本中可用。当 s 是空引用时,它将 return 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,因为它 returns 0 而不是异常。但是同样,根据要求,可以使用它。 TryParse 将是最好的,因为它总是自己处理异常。
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]);
}
}
}
有没有办法转换未处理的异常行,以便 "Input string" 将在 "correct" int "format" 中?我不记得这种类型的不兼容隐式转换的解决方法...第一个 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]);
}
}
}
Int32.TryParse(string, out int)方法将指定的32位有符号整数的字符串表示形式等价于out变量,return解析成功则为true,否则为false。此方法在 C# 2.0 及更高版本中可用。当 s 是空引用时,它将 return 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,因为它 returns 0 而不是异常。但是同样,根据要求,可以使用它。 TryParse 将是最好的,因为它总是自己处理异常。
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]);
}
}
}