Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取数组中对象的属性_C#_Arrays_Object - Fatal编程技术网

C# 获取数组中对象的属性

C# 获取数组中对象的属性,c#,arrays,object,C#,Arrays,Object,我这里有个小问题。 我有一个数组,其中包含一些对象(具有属性,duh) 现在我想根据它们拥有的int属性对它们进行排序。我的问题不是如何对它们进行排序,而是如何读取数组中对象的属性值 private void WriteHighscoreToFile(int groesse, int minenAnzahl, int zeit, string name) { using (StreamWriter sw = new StreamWriter(@"C:\Users\tstadler\Deskt

我这里有个小问题。 我有一个数组,其中包含一些对象(具有属性,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);
  }
}
使用LINQ方法:

其中,
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]);
   }   
}

我的问题不是如何对它们进行排序,而是如何读取数组中对象的属性值

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);
  }
}
你把它作为财产公开;例如:

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));
然后您可以从任何数组/列表访问该成员;例如:

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));
或:


您的数组是
CreateNewHighscore[]
类型,所以如果您想以经典方式访问属性,只需使用下面的行

_highscoresArray[i].YourIntProperty

其中“YourIntProperty”是所需的
int
property。

我不想知道如何排序。@timkattestadler
h.PropertyName
是读取
CreateNewHighscore
对象的属性的部分
CreateNewHighscore
类是什么?您能显示它的代码吗?因为您的问题不清楚您的意思是您在CreateNewHightCore构造函数中解析objectProperties时遇到了问题,例如,设置属性Spiler?如果这是问题所在,请演示如何使用您的CreateNewHighscore类,以及您在ctor中拥有什么。new CreateNewHighscore(_objectProperties)做什么?它是否解析字符串并填充对象上的属性?如果数组是类型化的,则可以使用索引器\u highscoresArray[i]。其中是CreateNewHighScore类型上您的属性的名称。我认为这是我的问题,因为它没有显示任何属性。您的属性设置为
public
?默认情况下,它们是私有的,因此无法从外部看到class@Tim在编辑之前,它们是隐式私有的——在我看来,它们是私有的(公共的不正确),但Tim的类包含字段,而不是属性。您的回答明确说明了如何将属性设置为public