Por favor, eche un vistazo al código. No debería tomar mucho tiempo para echar un vistazo.La lista <T> está borrada problema
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();
}
}
Desde GetCourse()
devuelve una referencia de _items, llamando t.GetCourses().Clear();
se despejar el Course
-list subyacente en la Teacher
ejemplo.
Quiero evitar este comportamiento. Es decir, el GetCourse()
devolvería una lista, pero no sería modificable.
¿Cómo lograr eso?
¿Es así como ahora se hace en C#? Estoy fuera del ciclo de C#, pero ¿harías una nueva lista como esa o de alguna manera clonarías la lista? Sospecho que la Lista contiene un método para copiar profundamente la lista. –
@Thomas: no creo que haya nada en 'List' para crear un clon profundo. La clonación se desaconseja en gran medida en mi experiencia. –