获取数组中对象的属性
本文关键字:属性 对象 数组 获取 | 更新日期: 2023-09-27 17:57:57
我有一个小问题。我有一个数组,它包含一些对象(它们有属性,duh)现在我想根据它们的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]);
} }
我的问题不是如何对它们进行排序,而是如何读取数组中对象的属性值?
您将其作为财产进行公开;例如:
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;
您的数组的类型是CreateNewHighscore[]
,所以若您想以经典方式访问属性,只需使用以下行。
_highscoresArray[i].YourIntProperty
其中"YourIntProperty"是所需的int
属性。
使用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
}
BTW当前您的类没有任何属性。只有公共字段(在上次编辑之后)。如果你想按字段值排序,那么:
_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]);
}
}