1

我一直在为我在学校的 c# 课做一个项目。我认为我有一个非常简单的问题。但我一直无法在任何地方找到答案。我不断得到关于如何制作结构列表的结果。我想知道如何访问结构内的列表?

所以这是我们的老师给我们的结构,我们必须在这个作业中使用它:

[Serializable]
struct Name
{
    public string firstName;
    public string lastName;
}

[Serializable]
struct Movie
{
    public string title;
    public string year;
    public Name director;
    public float quality;
    public string mpaaRating;
    public string genre;
    public List<Name> cast;
    public List<string> quotes;
    public List<string> keywords;
}

struct MovieList
{
    public int length;
    public Movie[] movie;
}

现在我尝试通过以下两种方式访问​​引号和关键字,但都产生了错误:

1.

string quotes;
MovieList ML = new MovieList();

quotes = Console.ReadLine();
ML.movie[0].quotes[0] = quotes;

2.

string quotes;
MovieList ML = new MovieList();

quotes = Console.ReadLine();
ML.movie[0].quotes.Add(quotes);
4

5 回答 5

2

结构是一种Value类型,因此,使用结构来携带所有这些信息会使其效率非常低,因为每次将其作为参数传递时,都需要复制结构的全部内容,等等。更好的方法是使用一个类,它是一种Reference类型,它的引用是传递的。

至于如何访问你的结构成员,这里有一个例子:

MovieList m =new MovieList();
m.movie = new Movie[10];
m.movie[0].title="The Girl with the Dragon Tatoo";
Console.WriteLine(m.movie[0].title); //The Girl with the Dragon Tatoo

更新:

显示如何访问报价:

MovieList m =new MovieList();
m.movie = new Movie[10];
m.movie[0].title="The Girl with the Dragon Tatoo";
m.movie[0].quotes = new List<string>();
m.movie[0].quotes.Add("Hello World");
Console.WriteLine(m.movie[0].title); //The Girl with the Dragon Tatoo

Console.WriteLine(m.movie[0].quotes[0]); //Hello World
于 2012-05-05T17:58:32.957 回答
1

您的MovieList结构包含一个数组Movie。数组未初始化。

为什么不只制作一个List<Movie>而不是单独的结构或类?

于 2012-05-05T17:47:54.327 回答
0

谢谢你对你的作业诚实。我看到的第一个问题是您试图在初始化之前使用列表。在结构内部,全新的列表引用了 null。你必须初始化它们。请对结构初始化进行研究。

于 2012-05-05T17:48:35.620 回答
0

制作这些类而不是结构。对于 MovieList 类中的每一部电影,您都必须创建一个新的 Movie 实例,以便您可以添加到引号列表中。否则它不会被初始化。

于 2012-05-05T17:51:59.020 回答
0

结构通常应该避免暴露可变类类型的字段或属性,除非结构将由只对其中引用的对象的身份感兴趣的代码使用,而不是它们的内容。假设有结构m1,其中包含有关某些电影的信息,并且m2,最初是空白的。如果执行代码:

  m2 = m1;
  m2.年 = 2012;
  m2.keywords.Add("恐龙")

Thenm1.year将不会被修改,但m1.keywords会添加“dinosaur”(因为m1.keywordsm2.keywords都指的是同一个 mutable List<string>.

用作数据持有者的结构可以公开逻辑不可变类类型的读写字段,或不包含任何可变类类型的值类型,但持有可变引用类型的结构通常具有奇怪的语义,应该实际时应避免。

于 2012-05-10T21:25:45.520 回答