首页 > 解决方案 > 找不到 System.ArgumentNullException 的修复:值不能为空

问题描述

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

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

这是代码:

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

如果有人知道如何解决错误,我将不胜感激您的帮助,请

标签: c#

解决方案


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

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

推荐阅读