0
using System;
using System.IO;
using System.Text;
public class Movies
{
    public string moviename { get; set; }
    public int cast { get; set; }
    public string[] castmember { get; set; }
    public override string ToString()
    {
        return string.Format("Movie: {0} \nCast #: {1} \nCast Member: {3}",
        moviename.ToString(),
        cast,
        castmember.ToString());
    }
}
public class MovieData
{
    public int NumberOfLines = 0;
    public string UserInput;
    public void ManageData()
    {
        string[] text = File.ReadAllLines("@File Path");
        NumberOfLines = text.GetUpperBound(0);
        Movies[] movies = new Movies[NumberOfLines];
        int i = 0;
        foreach (string line in text)
        {
            movies[i] = new Movies();
            movies[i].moviename = Convert.ToString(line.Trim());
            movies[i].cast = Convert.ToInt32(line.Trim());
            int ii = movies[i].cast;
            //Here I want to create a movies[i].castmember[ii] with ii being the length


}

基本的に行形式のデータを格納しようとしていますが、配列に格納する方が論理的である特定の行のセットがあります。長さがii(キャスト)のmovies [i] .castmember配列を作成するにはどうすればよいですか?

4

3 に答える 3

1

コードにいくつかのエラーがあります。たとえば、同じline.Trim()値をにstring変換していますInt32が、これは問題ではありません。

ii要素の配列を作成する方法を尋ねていると思います。それだけです。

movies[i].castmember = new string[ii];
于 2012-12-10T09:27:15.787 に答える
0

これはもっと簡単なアプローチではないでしょうか?

var movies = File.ReadAllLines("@FilePath").Select(line =>
    new Movies
        {
            moviename = line.Trim(),
            cast = Convert.ToInt32(line.Trim()),
            castmember = new string[Convert.ToInt32(line.Trim())]
        });

あなたが投稿したコードについて、私は多くの懸念を抱いています。たとえば、同じline名前で名前を表すと同時にキャストサイズを定義するにはどうすればよいでしょうか。Movies単一の映画を表すクラスに複数の名前があるのはなぜですか?


スプーンで餌をやる危険を冒して、あなたのコードはもっとこのようにすべきですか?

using System;
using System.IO;
using System.Text;

public class Movie
{
     public string Name { get; set; }
     public IList<string> Cast { get; set; }

     public override string ToString()
     {
         var s = new StringBuilder();
         s.AppendFormat("Movie: {0}", this.Name);
         s.AppendLine();
         for (var i = 0; i < this.Cast.Count; i++)
         {
             s.AppendFormat(
                 "  Cast #:{0}, Member: {1}",
                 i + 1,
                 this.Cast[i]);
             s.AppendLine();
         }
         return s.ToString();
     }
}

public class MovieData
{
    public void MovieData(string filePath)
    {
        this.Movies = File.ReadAllLines(filePath).Select(line =>
            new Movie
            {
                // Something here that makes sense.
            });
    }

    public IList<Movie> Movies { get; private set; }
}
于 2012-12-10T09:28:26.740 に答える
0
var moviesCollection = new Collection<Movie>();

var movie = new Movie();
// for each movie...
moviesCollection.Add(movie);

// if you use System.Linq you can convert any IEnumerable<T> to array
// by calling ToArray()

movies = moviesCollection.ToArray();

また、キャストメンバーを映画に追加する場合も同じ原則に従うことができます。

于 2012-12-10T09:28:27.433 に答える