首页 > 解决方案 > 自学C#。不知道我需要修复哪里/什么(对象引用未设置为对象的实例。第 25 行)

问题描述

我不断收到标题错误。我在编码方面不是很有经验,也不擅长阅读和理解代码。

我也知道这将是一个简单的修复,但我仍然不知道我需要修复什么或在哪里修复。

using System;
using System.Linq;

namespace Day_6
{
    class Program
    {
        static void Main(string[] args)
        {
            int numStrings = Convert.ToInt32(Console.ReadLine());
            var str = "";
            string[] words = new string[1000];

            var even = new string[500];
            var odd = new string[500];

            for (int i = 0; i < numStrings; i++)
            {
                str = Console.ReadLine();
                words.Append(str);
            }

            foreach (var word in words)
            {
                foreach (var letter in word)
                {
                    if (word.IndexOf(letter)%2 != 0)
                    {
                        odd.Append(letter.ToString());
                    }
                    else
                    {
                        even.Append(letter.ToString());
                    }
                }
                Console.WriteLine(odd + " " + even);
            }
        }
    }
}

任何帮助,即使它只是阅读材料,所以我可以理解为什么/什么/在哪里得到这个错误会很棒。

毕竟我正在努力学习!

非常感谢

标签: c#

解决方案


空引用错误的第一个实例是由您拥有的第 17 行引起的words.Append(str);,将其替换为words[i] = str;.

在此处阅读IEnumerable.Append()方法的行为,因为它不会就地修改数组;它返回一个 new ,然后必须将其枚举到一个数组中。wordsIEnumerable

所以这个语句words.Append(str);实际上什么也没做;如果您希望使用该Append()方法,则必须保存它的返回值并将结果枚举到一个数组中,如下所示:

words = words.Append(str).ToArray()

Main()此外,在您的方法(第 9 行)的第 3 条语句中有第二个空引用错误,您有

string[] words = new string[1000];

如果您将其替换为:

string[] words = new string[numStrings];

您将消除foreach循环遍历空元素的可能性。


推荐阅读