2015-12-07 12 views
2

код, который я смотрю на это следующим образомC# объекты в списке перезаписи друг друга

string data; 
string[] tokens; 

while (sr.EndOfStream != true) 
{ 
    data = sr.ReadLine(); 
    char delim = ','; 
    tokens = data.Split(delim); 
    Team t = new Team(tokens[0], int.Parse(tokens[1]), int.Parse(tokens[2])); 
    TeamList.Add(t); 
} 

//Test to make sure the teams were stored properly 
foreach(Team t in TeamList) 
{ 
    Console.WriteLine(t.Name); 
} 

sr.Close(); 

Когда я использую цикл Еогеасп писать названия команд из отображаются 9 копий Team9 (Составы команд перечислены 1-9 в текстовом файле по строкам, с двумя номерами, разделенными запятыми, чтобы удерживать выигрыши и потери для каждой команды, из-за чего есть делимы запятыми). Это касается любого количества команд, которые я добавляю, если я добавлю 10-ю команду, она сделает 10 копий команды10, и если я использую 8 команд, она отобразит 8 экземпляров Team8. Я добавил цикл foreach в цикл while, чтобы он показывал команды на каждом этапе и он переписывал все предыдущие объекты при создании нового, так, например, при первом запуске цикла он показывает Team1, затем в следующий раз он запускает цикл, он показывает две строки Team2 и так далее. Из моих исследований я увидел, что это обычно вызвано не объявлением нового объекта внутри цикла, но в этом случае новый объект объявляется внутри цикла.

Edit: класс команды выглядит следующим образом

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

namespace ConsoleApplication2 
{ 
class Team 
{ 
    private static string tn; 
    private static int Wins, Losses; 

    public Team() 
    { 

    } 
    public Team(string name, int wins, int losses) 
    { 
     tn = name; 
     Wins = wins; 
     Losses = losses; 
    } 

    public override string ToString() 
    { 
     return tn + ", wins: " + Wins + ", losses: " + Losses; 
    } 

    public string Name 
    { 
     get { return tn; } 
    } 
} 
} 

Переменная TeamList и основным классом являются

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

namespace ConsoleApplication2 
{ 
class Program 
{ 


    private static Random pick = new Random(); 

    private static List<Team> TeamList = new List<Team>(); 

    static void Main(string[] args) 
    {  
     //Reading file io 
     Schedule(TeamList); 
     Console.ReadLine(); 
    } 

static void Schedule(List<Team> TeamList) 
    { 

     StreamReader sr = new StreamReader("C:/Users/andre/Desktop/VisualStudioProjects/ConsoleApplication1/ConsoleApplication1/TeamList.txt"); 
     string data; 
     string[] tokens; 

     while (sr.EndOfStream != true) 
     { 
      data = sr.ReadLine(); 
      char delim = ','; 
      tokens = data.Split(delim); 
      Team t = new Team(tokens[0], int.Parse(tokens[1]), int.Parse(tokens[2])); 
      TeamList.Add(t); 
      foreach(Team x in TeamList) 
     { 
       Console.WriteLine(x.Name); 
      } 
     } 


     //Test to make sure the teams were stored properly 
     foreach(Team t in TeamList) 
     { 
      Console.WriteLine(t.Name); 
     } 

     sr.Close(); 
     } 

Текстовый файл просто файл, который содержит следующую

Team1,0,0 
Team2,0,0 
Team3,0,0 
Team4,0,0 
Team5,0,0 
Team6,0,0 
Team7,0,0 
Team8,0,0 
Team9,0,0 
+0

Как определяется команда? Что такое TeamList? – Ishamael

+0

Поскольку 't' - локальная переменная, которая создается каждый раз, не должно быть никаких проблем. Покажите свою реализацию 'Team' и' TeamList'. –

+0

TeamList - глобальная переменная, объявленная как private static. Список TeamList = новый Список () ;. Класс Team определяется как public Team (имя строки, int wins, int loss). Я считаю, что это должны быть ответы на ваши вопросы. Скажите, пожалуйста, если вам нужно что-нибудь еще, я все еще довольно новичок в программировании. – Prolixitas

ответ

2

У вас есть

class Team 
{ 
    private static string tn; //STATIC?? 
    private static int Wins, Losses; //STATIC?? 
} 

static означает, что переменная распределяется между всеми экземплярами Team в вашем приложении. Удалите его, пожалуйста. Это проблема.

+0

Я скопировал класс у некоторых членов группы для проекта и даже не заметил, что переменные были объявлены как статические, спасибо за помощь. – Prolixitas

+1

@brainlesscoder Я отредактировал сообщение немного, чтобы сделать его не так абразивным, так как я не думаю, что такое отношение конструктивно на SO. Не стесняйтесь откат, если хотите. – Rob

+0

@Prolixitas, прилагая усилия для обеспечения [MCVE], мог бы помочь вам найти проблему ... (в текущем состоянии вопроса, похоже, что вы скопировали какой-то код и даже не посмотрели на него), может рассматриваться как отрицательный знак некоторыми) –

Смежные вопросы