有关数组,方法和ref参数的更多问题

时间:2011-09-06 00:45:17

标签: c# arrays methods ref

今天早些时候,我正在为我的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方法尚未完成。

2 个答案:

答案 0 :(得分:2)

问题在于行static string[] authorFirstNames;

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

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

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

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

答案 1 :(得分:1)

我没有在代码中看到任何地方初始化这些变量:

static string[] authorFirstNames;
static string[] authorLastNames;
static string[] publisherNames;
static float[] prices;