C# 修改结构内部的列表

C# 修改结构内部的列表,c#,arrays,struct,C#,Arrays,Struct,我一直在为我在学校的c#班做一个项目。我想我有一个非常简单的问题。但我在任何地方都找不到答案。我不断得到关于如何制作结构列表的结果。我想知道如何访问结构中的列表 这是老师给我们的结构,我们必须使用它来完成这项作业: [Serializable] struct Name { public string firstName; public string lastName; } [Serializable] struct Movie { public string title

我一直在为我在学校的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;
}
二,


您的
MovieList
结构包含
Movie
的数组。阵列未初始化


为什么不只做一个
列表
而不是一个单独的结构或类呢?

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

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

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

关于如何访问结构成员,以下是一个示例:

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
MovieList m=new MovieList();
m、 电影=新电影[10];
m、 电影[0]。title=“龙塔图女郎”;
m、 电影[0]。引号=新列表();
m、 电影[0]。引用。添加(“你好世界”);
Console.WriteLine(m.movie[0].title)//穿龙袍的女孩
Console.WriteLine(m.movie[0].quotes[0])//你好,世界

结构通常应避免暴露可变类类型的字段或属性,除非代码使用结构时只关心其中引用的对象的标识,而不关心其内容。假设一个有结构
m1
,其中包含有关某部电影的信息,以及
m2
,最初为空。如果执行代码:

m2 = m1; m2.year = 2012; m2.keywords.Add("dinosaur") m2=m1; m2.1年=2012年; m2.关键词.添加(“恐龙”) 然后,
m1.year
将不被修改,但
m1.keywords
将添加“恐龙”(因为
m1.keywords
m2.keywords
都引用相同的可变
列表


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

您不希望电影是一个结构。将其作为一个类。更多信息,请参阅。当你说它不起作用时,你是说你得到了一个错误吗?谢谢你的快速输入。它必须在这个作业的结构中。我们的老师给了我们关于结构的部分,他将根据这个部分给我们评分。没有任何方法吗?好的,当然。只需初始化电影数组对象并创建一个新的引号列表。我没有输入所有代码,因为这是一个大任务,但我已经初始化了数组。
ML.movie=new movie[MAX\u MOVIES];
除了引号和关键字之外,我还能输入和输出任何东西。是的,谢谢你们,伊卡洛斯,尽管我能用标题读写。我的问题是我需要知道如何访问引号和关键字。若我们的老师不需要结构,我会使用一个类。引号和关键字是我需要的两个字段当我尝试读取和写入时,et出错。如果你在这里,我会拥抱你Icarus。非常感谢。这是我第一次使用c#的内置列表类,对此我并不熟悉。我真的很感激。新创建列表/数组的DA构造函数将大大简化这些结构的使用。
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
m2 = m1; m2.year = 2012; m2.keywords.Add("dinosaur")