Una multilista es una List<T> donde cada elemento T contiene a su vez otra List<...>. Es la forma natural de modelar relaciones 1 a muchos: un album tiene muchos heroes, una caja tiene muchas compras.
class Heroe { string Codigo; string Nombre; int Poder; }
class Album {
string Codigo;
string Nombre;
List<Heroe> Heroes; // ← lista anidada
}
List<Album> albumes; // ← lista de albumes
album.Heroes.Count entre todos.En multilistas la regla mas importante es: no permitir duplicados. Antes de agregar, busca con Find o Any; si existe, no agregues.
En la clase esto se implementa en un Form. Las listas viven como atributos de la clase Form (no en Main):
public partial class FrmAlbum : Form {
List<Album> albumes = new List<Album>();
void btnCrearAlbum_Click(object sender, EventArgs e) {
if (albumes.Any(a => a.Codigo == txtCodigo.Text)) {
MessageBox.Show("Codigo repetido");
return;
}
albumes.Add(new Album(txtCodigo.Text, txtNombre.Text));
cboAlbumes.Items.Add(txtCodigo.Text); // refrescar combo
}
void btnListarHeroes_Click(object sender, EventArgs e) {
var alb = albumes.Find(a => a.Codigo == cboAlbumes.Text);
lstHeroes.Items.Clear();
foreach (var h in alb.Heroes)
lstHeroes.Items.Add(h.Nombre + " (poder " + h.Poder + ")");
}
}
Patron: el ComboBox elige el album, el ListBox muestra la lista anidada de ese album. La lista vive como atributo del Form para que persista entre clicks.