找不到针对System.ArgumentNullException的修复程序:值不能为空

时间:2018-10-22 10:23:53

标签: c#

我真的是编码新手,所以我不知道如何解决此错误:

  

$ mcs * .cs -out:main.exe   $ mono main.exe   插入第一个数字:
  未处理的异常:   System.ArgumentNullException:值不能为null。   参数名称:字符串     在<902ab9e386384bec9c07fa19aa938869>:0中的System.Number.StringToNumber(System.String str,System.Globalization.NumberStyles选项,System.Number + NumberBuffer&数字,System.Globalization.NumberFormatInfo信息,System.Boolean parseDecimal)[0x00003]处     在<902ab9e386384bec9c07fa19aa938869>:0中的System.Number.ParseInt32(System.String s,System.Globalization.NumberStyles样式,System.Globalization.NumberFormatInfo信息)[0x00015]处     在<902ab9e386384bec9c07fa19aa938869>:0中的System.Int32.Parse(System.String s)[0x00007]处     在RectangleVolume.Program.Main()中的[0x0000f]在<0c8d91594f2e4f869d1e8405ed48fd66>:0中   [错误]致命异常:System.ArgumentNullException:值不能为null。   参数名称:字符串     在<902ab9e386384bec9c07fa19aa938869>:0中的System.Number.StringToNumber(System.String str,System.Globalization.NumberStyles选项,System.Number + NumberBuffer&数字,System.Globalization.NumberFormatInfo信息,System.Boolean parseDecimal)[0x00003]处     在<902ab9e386384bec9c07fa19aa938869>:0中的System.Number.ParseInt32(System.String s,System.Globalization.NumberStyles样式,System.Globalization.NumberFormatInfo信息)[0x00015]处     在<902ab9e386384bec9c07fa19aa938869>:0中的System.Int32.Parse(System.String s)[0x00007]处     在RectangleVolume.Program.Main()[0x0000f]中,位于<0c8d91594f2e4f869d1e8405ed48fd66>:0

代码如下:

using System;

  namespace RectangleVolume
  {
    class Program
    {
      static void Main()
      {
        int number1;
        int number2;
        int volume;
        int two;
        int zero;

        Console.Write("Insert the first number:  ");
        number1 = int.Parse(Console.ReadLine());
        Console.Write("Insert the second number:  ");
        number2 = int.Parse(Console.ReadLine());

        two = 2;
        two = int.Parse(Console.ReadLine());
        zero = 0;
        zero = int.Parse(Console.ReadLine());

        if (number1 < zero)
        {
            Console.WriteLine("First number is not a positive");
        }
        else
        {
            Console.WriteLine(number1 * two);
        }

        if (number2 < zero)
        {
            Console.WriteLine("second number is not a positive");
        }
        else 
        {
            Console.WriteLine(number2 * two);
        }

        volume = number1 + number2;

        Console.Write("The Volume is: ");
        Console.WriteLine(volume);

        Console.ReadLine();
      }
   }      
}

如果任何人都知道如何解决该错误,谢谢您,ty

1 个答案:

答案 0 :(得分:2)

不要重复自己:让我们提取方法

   using System.Globalization;

   ...

   private static int ReadNonNegative(string title) {
     int result = 0;

     while (true) do {
       Console.Write($"Insert the {title} number: ");

       if (!int.TryParse(Console.ReadLine(), out result)) {
         Console.WriteLine();
         Console.WriteLine("Syntax error. Not a valid integer value. Please, try again.");
       }
       else if (result < 0) {
         Console.WriteLine();
         Console.WriteLine($"{CultureInfo.CurrentCulture.TextInfo.ToTitleCase(title)} number must not be negative.");  
       } 
       else 
         return result;
     }  
   }     

然后我们可以轻松使用它

   static void Main() {
     int number1 = ReadNonNegative("first");
     int number2 = ReadNonNegative("second");

     Console.WriteLine($"{number1 * 2}");
     Console.WriteLine($"{number2 * 2}");

     int volume = number1 + number2;

     Console.Write($"The Volume is: {volume}");
     Console.ReadLine();
   }