需要使用REF、数组和方法的帮助

本文关键字:方法 帮助 数组 REF | 更新日期: 2023-09-27 18:07:54

好的,我正在做我的实验从c#类涉及使用ref参数,数组和方法。我在做这件事时遇到了一些问题,我正在乞求帮助。所以. .首先,我将问题修改成最简单的块,以帮助我解释我遇到的问题。下面是一段简化的代码:

using System;
public class Repository 
{
    string[] titles;
    static void Main(string[] args)
    {
        string title;
        Console.Write("Title of book: ");
        title = Console.ReadLine();
        getBookInfo(ref title);
    }
    static void getBookInfo(ref string title)
    {
        titles[0] = title;
    }
    static void displayBooks(string[] titles)
    {
        Console.WriteLine("{0}", titles[0]);
    }
}

现在,当你尝试编译代码时,你注意到无法编译,因为错误提示"需要一个对象引用来访问非静态成员'Repository.titles'"。问题是,格式的3个方法必须完全张贴告知在分配。现在,如何在保留模板的同时避免这个问题呢?

另一个问题,我如何在main中显示方法displayBooks的内容?(由于一些问题,我还没有走到这一步。)

此致敬礼,请帮忙!

----------------------- 谢谢你的帮助! !---------

需要使用REF、数组和方法的帮助

首先,您不需要使用ref,除非您想更改title的值,因为它存在于Main()中。下面的代码演示了这个概念:

static void Main(string[] args)
{
    string a = "Are you going to try and change this?";
    string b = "Are you going to try and change this?";
    UsesRefParameter(ref a);
    DoesntUseRefParameter(b);
    Console.WriteLine(a); // I changed the value!
    Console.WriteLine(b); // Are you going to try and change this?
}
static void UsesRefParameter(ref string value)
{
    value = "I changed the value!";
}
static void DoesntUseRefParameter(string value)
{
    value = "I changed the value!";
}

数组需要先创建,然后才能使用它。下面是修改后的代码:

static string[] titles;
static void Main(string[] args)
{
    string title;
    titles = new string[1]; // We can hold one value.
    Console.Write("Title of book: ");
    title = Console.ReadLine();
    getBookInfo(title);
}
static void getBookInfo(string title)
{
    titles[0] = title;
}

要显示您的图书,您可以尝试以下方法:

static void displayBooks(string[] titles)
{
    // Go over each value.
    foreach (string title in titles)
    {
        // And write it out.
        Console.WriteLine(title);
    }
}
// In Main()
displayBooks(titles);

对于您的第一个问题,使titles静态:

private static string[] titles;

首先你要把title赋值给一个还没有初始化的数组title的索引0。当你试图给它赋值时,它本质上是一个空数组。

解决这个问题的快速方法是像这样修改你的代码:
private static string[] titles;
    static void Main(string[] args)
    {
        string title;
        Console.Write("Title of book: ");
        title = Console.ReadLine();
        getBookInfo(ref title);
        displayBooks(titles);
    }
    static void getBookInfo(ref string title)
    {
        //titles[0] = title;
        titles = new string[] {title};
    }
    static void displayBooks(string[] titles)
    {
        Console.WriteLine("{0}", titles[0]);
    }

如果你想把更多的书赋值给这个数组并打印出来,你需要用size初始化数组。我只会使用List<string>,它可以添加而不需要定义初始大小。

设置标题数组的大小:static string[] titles = new string[50];

回顾一下这个程序打算做什么,还有更多的逻辑需要添加。例如一个计数器变量,用于为titles数组中的下一个索引添加标题。