Perdón por el título estúpido, no tenía idea de cómo decir estoC#: Implementación de dos listas abstractas dentro de una clase no genérica?
Estoy creando una clase que tiene dos listas del mismo tipo. Se usa para copiar una referencia a un objeto en la primera lista a la segunda lista.
Aunque ambas listas serán del mismo tipo (mantienen el mismo tipo de objeto), pueden ser diferentes cada vez que se inicializa esta clase.
Así que supongo que debería hacer los tipos de lista como un tipo de lista de resumen. Me gustaría asegurarme de que se escribirán fuertemente cuando se haga la instancia (pero no es necesario si es problemático). El problema está en el método que mueve los elementos seleccionados de la lista1 a la lista2. Los tipos de listas abstractas normalmente no tienen métodos para eso.
Supongo que la solución normal sería hacer que la clase sea genérica (className <T>
thingy) pero no estoy seguro de poder hacerlo (al menos no sé cómo) porque esta clase hereda un UserControl de WPF.
Aquí está el código:
public partial class SubsetSelectionLists : UserControl
{
public static DependencyProperty SetCollectionProperty = DependencyProperty.Register("SetCollection", typeof("Need a abstract list type here"), typeof(SubsetSelectionLists));
public static DependencyProperty SubsetCollectionProperty = DependencyProperty.Register("SubsetCollection", typeof("Need a abstract list type here"), typeof(SubsetSelectionLists));
public "Need a abstract list type here" SetCollection
{
get
{
return ("Need a abstract list type here") GetValue(SetCollectionProperty);
}
set
{
SetValue(SetCollectionProperty, value);
}
}
public "Need a abstract list type here" SubsetCollection
{
get
{
return ("Need a abstract list type here")GetValue(SubsetCollectionProperty);
}
set
{
SetValue(SubsetCollectionProperty, value);
}
}
public SubsetSelectionLists()
{
InitializeComponent();
SubsetSelectiongrid.DataContext = this;
}
private void selectionBtnClick(object sender, RoutedEventArgs e)
{
SubsetCollection.AddTheseItems(SET.SelecctedItems)
}
private void removeBtnClick(object sender, RoutedEventArgs e)
{
SUBSET.RemoveTheseItems(SUBSET.SelectedItem);
}
}
EDIT: Solución
Algunas respuestas me apuntaban hacia la solución óptima de la creación de una clase genérica. Sin embargo, esto puede ser problemático en WPF. Tendría que omitir el XAML en la clase genérica de nivel superior.
Esto significa que podría hacer el XAML en el tipo de clases secundarias específicas que no es algo que le gustaría hacer (a menos que solo el código sea algo que pueda volver a usar pero el aspecto sea variable). También podría haber diseñado el control utilizando el código, supongo, pero no estoy seguro de cuán efectivo sería.
Me apuntaron hacia el objeto IList que es una lista abstracta de la que muchos otros heredarán y que voy a usar. Es un truco, pero como esto no se usará en una biblioteca abierta, estoy de acuerdo. De lo contrario, usaría la ruta genérica.
¿Por qué razón no puedes hacerlo en linq? ¿tienes limitaciones en tu versión de .net? – phillip
Qué versión .net. Linq y genéricos deberían poder hacer eso – Hawxby
No entiendo cómo linq podría ayudarme aquí? Por favor, envíe una respuesta de cómo se hace. Estoy usando .net 3.5 pero probablemente me actualizaré a 4.0 –