用户输入初始化数组示例和隐式转换

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]);
        }
    }
}

Working Example