2013-02-05 2 views
-1

여기에 작은 문제가 있습니다. 일부 객체 (보유 속성, duh)를 보유하는 배열이 있습니다. 이제이 객체를 int 속성으로 정렬하려고합니다. 내 qustion 그들을 정렬하는 방법이 아니지만 배열의 개체 속성 값을 어떻게 읽습니까? 배열의 객체 속성 가져 오기

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]); 
    } } 
+0

'CreateNewHighscore' 클래스 란 무엇입니까? –

+0

CreateNewHightscore 생성자에서 _objectProperties를 구문 분석하여 예를 들어 속성 ​​Spieler?를 설정하는 데 문제가 있음을 의미합니다. 그게 문제라면 CreateNewHighscore 클래스를 사용하고 ctor에있는 것을 보여주십시오. –

+0

새로운 CreateNewHighscore (_objectProperties)는 무엇을합니까? 문자열을 파싱하고 객체의 속성을 채 웁니까? 배열을 입력하면 _highscoresArray [i]. 인덱서를 사용할 수 있습니다. 여기서 는 CreateNewHighScore 유형의 속성 이름입니다. – Jay

답변

2

내 qustion 그들을 정렬하는 방법이 아니라 어떻게 내가 배열에있는 객체의 속성 값을 읽습니까?

당신은 속성으로 노출합니다; 예를 들면 :

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; 
+0

좋아, 이것을 시도 할게. –

+0

이 작업을했습니다. 감사합니다. –

0

사용 LINQ OrderBy 방법 :

public int _punkte; // public field 

public Punkte // public property 
{ 
    get { return _punkte; } 
    set { _punkte = value; } // you may not need setter 
} 
: PunkteCreateNewHighscore 클래스의 속성은

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

현재 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]); 
    } 

}

+0

나는 어떻게 분류하는지 알고 싶지 않다. –

+0

@TimKatheteStadler'h.PropertyName'은'CreateNewHighscore' 객체의 속성을 읽는 부분입니다 –

0

배열은 고전적인 방법으로 속성에 액세스하려면, 그래서 그냥 행 다음에 사용 유형 CreateNewHighscore[]이다. "YourIntProperty는"int 속성을 원하는됩니다

_highscoresArray[i].YourIntProperty 

.

+0

내 생각 엔 그게 내 문제라고 생각해. 왜냐하면 나에게 어떤 속성이 있는지 보여주지 못하기 때문이다. –

+0

속성이 '공개'로 설정되어 있습니까? 기본적으로 그것들은'private'이므로 클래스 – Nogard

+0

외부에서 볼 수는 없습니다. 편집하기 전에 편집 된 포스트 –

관련 문제