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;
}

次の 2 つの方法で引用符とキーワードにアクセスしようとしましたが、どちらもエラーが発生しました。

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>別の構造体またはクラスの代わりに、単に a を作成しないのはなぜですか?

于 2012-05-05T17:47:54.327 に答える
0

構造体は一般に、変更可能なクラス型のフィールドまたはプロパティを公開しないようにする必要あります。ある映画に関する情報を含む構造体と、最初は空白の があるとします。コードを実行すると:m1m2

  m2 = m1;
  m2.year = 2012;
  m2.keywords.Add("恐竜")

その後m1.year、変更されませんが、m1.keywords「恐竜」が追加されます(m1.keywordsm2.keywords両方が同じ mutable を参照するため) List<string>

データホルダーとして使用される構造体が、論理的に不変のクラス型の読み取り/書き込みフィールド、または可変クラス型を含まない値型を公開することは問題ありませんが、可変参照型を保持する構造体はしばしば奇妙なセマンティクスを持ち、そうすべきです。実用的な場合は避けてください。

于 2012-05-10T21:25:45.520 に答える
0

宿題について正直に言ってくれてありがとう。私が目にする最初の問題は、リストが初期化される前にリストを使用しようとしているということです。構造内では、真新しいリストが null を参照しています。それらを初期化する必要があります。構造体の初期化について調べてください。

于 2012-05-05T17:48:35.620 に答える
0

構造体ではなく、これらのクラスを作成します。MovieList クラスのすべての Movie について、引用符リストに追加できるように、Movie の新しいインスタンスを作成する必要があります。そうしないと、初期化されません。

于 2012-05-05T17:51:59.020 に答える