Proszę spojrzeć na kod. Nie powinno zająć dużo czasu, aby rzucić okiem.Lista <T> jest wyczyszczona problem
class Teacher
{
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
private string _message;
public string Message
{
get { return _message; }
set { _message = value; }
}
public Teacher(int id, string msg)
{
_id = id;
_message = msg;
}
private List<Course> _items;
public List<Course> GetCourses()
{
return _items;
}
public Teacher()
{
if (_items == null)
{
_items = new List<Course>();
}
_items.Add(new Course(1, "cpp"));
_items.Add(new Course(1, "java"));
_items.Add(new Course(1, "cs"));
}
public void Show()
{
Console.WriteLine(this._id);
Console.WriteLine(this._message);
}
public void ShowList()
{
foreach(Course c in _items)
{
c.Show();
}
}
}
class Course
{
private int _id;
public int ID
{
get { return _id; }
set { _id = value; }
}
private string _message;
public string Message
{
get { return _message; }
set { _message = value; }
}
public Course(int id, string msg)
{
_id = id;
_message = msg;
}
private List<Teacher> _items;
public List<Teacher> GetTeachers()
{
return _items;
}
public Course()
{
if(_items == null)
{
_items = new List<Teacher>();
}
_items.Add(new Teacher(1, "ttt"));
_items.Add(new Teacher(1, "ppp"));
_items.Add(new Teacher(1, "mmm"));
}
public void Show()
{
Console.WriteLine(this._id);
Console.WriteLine(this._message);
}
public void ShowList()
{
foreach (Teacher t in _items)
{
t.Show();
}
}
}
class Program
{
static void Main(string[] args)
{
Teacher t = new Teacher();
t.ID = 1;
t.Message = "Damn";
t.Show();
t.ShowList();
t.GetCourses().Clear();
t.Show();
t.ShowList();
Console.ReadLine();
}
}
Od GetCourse()
zwraca referencję _items, nazywając t.GetCourses().Clear();
jest wyczyszczenie stanowiącego podstawę Course
-list w instancji Teacher
.
Chcę temu zapobiec. Oznacza to, że GetCourse()
zwróci listę, ale nie można jej modyfikować.
Jak to osiągnąć?
Czy tak się teraz robi w języku C#? Jestem poza pętlą C#, ale czy mógłbyś utworzyć nową Listę w ten sposób, czy też w jakiś sposób sklonowałbyś listę? Podejrzewam, że Lista zawiera metodę dokładnego kopiowania listy. –
@Thomas: Nie sądzę, że jest coś w 'List', aby utworzyć głęboki klon. Klonowanie jest w dużym stopniu zniechęcone moim doświadczeniem. –