c# - 找不到 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();
}
}
}
如果有人知道如何解决错误,我将不胜感激您的帮助,请
解决方案
不要重复自己:让我们提取一个方法:
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();
}
推荐阅读
- c++ - 在发布模式下提升 ASIO 段错误
- postman - 邮递员监控请求错误“错误:NETERR:getaddrinfo ENOTFOUND localhost”
- c++ - std::string s1 {"现代 C++", 3} 与 std::string s1 {str, 3}
- c++ - std:set 如何在插入过程中检查 set 中是否存在等效元素?
- python - 如何防止我的程序抛出 JSON 解码错误?
- generics - 具有多种类型的边界
- r - 将长向量分成数据框中的单个数字
- java - Gradle 未构建 - 类 DefaultTaskInputPropertyRegistration 无法转换为类 TaskInputs
- java - 如何使用 scala 制作 FXML 控制器?
- python - Attributeerror _rsaobj 对象没有“导出键”属性