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

时间:2015-03-17 02:41:16

标签: c# implicit-conversion

有没有办法转换未处理的异常行,以便"输入字符串"将在"正确" 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]);
            }
        }
    }

2 个答案:

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

Working Example