0

今天早些时候,我正在为我的 C# 类LINK TO PREVIOUS PROBLEM做作业,现在我遇到了另一个问题,我不明白哪里出了问题。所以在第一篇文章中,我遇到了静态参数的问题,所以我得到了解释和修复。但是现在,我收到一个错误消息,而不是“对象引用未设置为对象的实例”。我检查了任何拼写错误,但仍然无法运行它。PS,问题不是在编译时出现,而是在输入所有数据时出现,当我在输入数据并按回车后按 N 时。请看一下。

using System;

public class Repository 
{
    static string[] titles;
    static string[] authorFirstNames;
    static string[] authorLastNames;
    static string[] publisherNames;
    static float[] prices;
    static int number;

    static void Main(string[] args)
    {
        string title = "";
        string authorFirst = "";
        string authorLast = "";
        string publisherName = "";
        float price = 0;

        getBookInfo(ref title, ref authorFirst, ref authorLast, ref publisherName, ref price);      
        displayBooks(titles, authorFirstNames, authorLastNames, publisherNames, prices, number);
    }

    static void getBookInfo(ref string title, ref string authorFirst, 
                            ref string authorLast, ref string publisherName, 
                            ref float price)
    {
        string continued;
        string float_num;
        int i = 0;

        titles = new string[50];

        do
        {
            Console.Write("Title of book: ");
            title = Console.ReadLine();
            Console.Write("Authors first name: ");
            authorFirst = Console.ReadLine();
            Console.Write("Authors last name: ");
            authorLast = Console.ReadLine();
            Console.Write("Publishers Name: ");
            publisherName = Console.ReadLine();
            Console.Write("Price: ");
            float_num = Console.ReadLine();
            Console.Write("Add another book? Y/N ");
            continued = Console.ReadLine().ToLower();

            price = float.Parse(float_num);

            titles[i] = title;
            authorFirstNames[i] = authorFirst;
            authorLastNames[i] = authorLast;
            publisherNames[i] = publisherName;
            prices[i] = price;

            number = i;

            i++;
        }
        while (continued == "y");
    }

    static void displayBooks(string[] titles, string[] authorFirstNames, 
                             string[] authorLastNames, string[] publisherNames, 
                             float[] prices, int number)
    {
        foreach (string title in titles)
        {
            Console.WriteLine(title);
            if(title == null)
                break;
        }
    }
}

原因是什么?

问候,并希望得到一些建议。

PS,displayBooks 方法还没有完成。

4

2 回答 2

2

问题出在线路上static string[] authorFirstNames;

您没有初始化数组,因此该对象为空。您需要像这样初始化它:static string[] authorFirstNames=new string[1];您必须指定数组的大小,即 [1] 的大小。这意味着该数组可以容纳 1 个字符串。

您可以稍后使用 Array.Resize() 来调整数组的大小。

如果项目允许,您可能希望使用 aList<string>而不是字符串数组。

您可以通过查看调试器中的代码自行解决此类问题。在这种情况下,假设您使用的是 Visual Studio,它会突出显示引发异常的行。如果您查看 的值authorFirstNames,您会看到它为空,这意味着它从未被初始化。

于 2011-09-06T00:55:50.327 回答
1

我在您的代码中看不到任何地方初始化这些变量:

static string[] authorFirstNames;
static string[] authorLastNames;
static string[] publisherNames;
static float[] prices;
于 2011-09-06T00:55:03.010 回答