-1

ここで小さな問題があります。私はいくつかのオブジェクトを保持する配列を持っています(プロパティを持っています)今、それらが持っているintプロパティでそれらをソートしたいと思います。私の質問は、それらを並べ替える方法ではありませんが、配列内のオブジェクトのプロパティの値を読み取るにはどうすればよいですか?

private void WriteHighscoreToFile(int groesse, int minenAnzahl, int zeit, string name)
{
  using (StreamWriter sw = new StreamWriter(@"C:\Users\tstadler\Desktop\Highscore.txt", true))
  {
    sw.WriteLine("Spieler: " + name + " Punkte: " + (groesse * minenAnzahl - zeit * 2) + " Groesse: " + groesse + " Minenanzahl " + minenAnzahl + " Zeit: " + zeit);
  }

  using (StreamReader sr = new StreamReader(@"C:\Users\tstadler\Desktop\Highscore.txt", true))
  {
    List<CreateNewHighscore> highScores = new List<CreateNewHighscore>();
    while (sr.ReadLine() != null)
    {
      _objectProperties = sr.ReadLine().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
      highScores.Add(new CreateNewHighscore(_objectProperties));
      highscoreCount++;
    }
    _highscoresArray = highScores.ToArray();
    vergleicheArray(_highscoresArray);
  }
}

クラス:

    public class CreateNewHighscore
      {
        public string _name;
        public int _punkte;
        public int _groesse;
        public int _minenAnzahl;
        public int _zeit;


     public CreateNewHighscore(string[] infos)
     {
       _name = infos[1];
       _punkte = int.Parse(infos[5]) * int.Parse(infos[7]) - 2 * int.Parse(infos[9]);
       _groesse = int.Parse(infos[5]);
       _minenAnzahl = int.Parse(infos[7]);
       _zeit = int.Parse(infos[9]);
     }   }
4

3 に答える 3

2

私の質問は、それらを並べ替える方法ではありませんが、配列内のオブジェクトのプロパティの値を読み取るにはどうすればよいですか?

プロパティとして公開します。例えば:

class CreateNewHighscore
{
    string _name;
    int _punkte, _groesse, _minenAnzahl, _zeit;
    public string Name { get { return _name; } }
    public int Punkte { get { return _punkte; } }
    public int Groesse { get { return _groesse; } }
    public int Zeit { get { return _zeit; } }
    public int MinenAnzahl { get { return _minenAnzahl; } }

    // constructor not shown
}

次に、任意の配列/リストからそのメンバーにアクセスできます。例えば:

highScores.Sort((x,y) => x.Punkte.CompareTo(y.Punkte));

また:

int firstPunkte = _highscoresArray[0].Punkte;
于 2013-02-05T09:24:59.370 に答える
0

あなたの配列はタイプCreateNewHighscore[]なので、古典的な方法でプロパティにアクセスしたい場合は、次の行を使用してください。

_highscoresArray[i].YourIntProperty

ここで、「YourIntProperty」は必要なintプロパティです。

于 2013-02-05T09:25:27.783 に答える
0

LINQ OrderByメソッドを使用します。

_highscoresArray = highScores.OrderBy(h => h.Punkte).ToArray();

あなたのクラスPunkteのプロパティはどこですか:CreateNewHighscore

public int _punkte; // public field

public Punkte // public property
{
   get { return _punkte; }
   set { _punkte = value; } // you may not need setter
}

ところで、現在、あなたのクラスにはプロパティがありません。パブリック (最後の編集後) フィールドのみがあります。フィールド値で並べ替える場合は、次のようにします。

_highscoresArray = highScores.OrderBy(h => h._punkte).ToArray();

ただし、フィールドを非公開にするか、代わりに自動実装プロパティを使用することをお勧めします。そして、クラスの名前を変更します。名前は本当にひどいもので、メソッド名のように聞こえます。

public class CreateNewHighscore
{
    public string Name { get; private set; }
    public int Punkte { get; private set; }
    public int Groesse { get; private set; }
    public int MinenAnzahl { get; private set; }
    public int Zeit { get; private set; }

    public CreateNewHighscore(string[] infos)
    {
       // check infos count
       Name = infos[1];
       Punkte = int.Parse(infos[5]) * int.Parse(infos[7]) - 
                2 * int.Parse(infos[9]);
       Groesse = int.Parse(infos[5]);
       MinenAnzahl = int.Parse(infos[7]);
       Zeit = int.Parse(infos[9]);
   }   

}

于 2013-02-05T09:19:29.887 に答える