好的,我正在从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的内容? (因为问题我没有这么远)。
问候,请帮忙!
-----------------------感谢您的帮助! ---------
答案 0 :(得分:1)
关于第一个问题,请titles
静态:
private static string[] titles;
答案 1 :(得分:1)
首先,您不需要使用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);
答案 2 :(得分:1)
好的,首先,您正在尝试将标题分配给名为titles的数组的索引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]);
}
如果要为此阵列分配更多书籍并将其打印出来,则需要使用大小初始化阵列。我只想使用List<string>
来添加,而无需定义初始大小。
要将titles数组设置为一个大小,只需执行以下操作:static string[] titles = new string[50];
回顾一下这个程序打算做什么,需要添加更多的逻辑。例如一个计数器变量,用于将标题添加到titles
数组中的下一个索引。