繁体   English   中英

找不到针对System.ArgumentNullException的修复:值不能为null

[英]Can't find a fix for System.ArgumentNullException: Value cannot be null

我对编码真的很陌生,所以我不知道如何解决此错误:

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

如果有人知道如何解决错误,我们将不胜感激。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM