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