【发布时间】:2011-02-02 12:41:10
【问题描述】:
抱歉标题太笨了,不知道怎么写
我正在创建一个具有两个相同类型列表的类。它用于将第一个列表中的对象的引用复制到第二个列表中。
虽然两个列表将属于同一类型(包含相同类型的对象),但每次初始化此类时可能会有所不同。
所以我猜我应该将 List 类型作为某种抽象列表。我想确保它们在实例化时会被强类型化(但如果有问题则不是必需的)。问题在于将所选项目从 list1 移动到 list2 的方法内部,抽象列表类型通常没有相应的方法。
我想正常的解决方案是使类成为通用类(className<T>thingy),但我不确定我能做到这一点(至少我不知道如何),因为这个类继承了 WPF UserControl。
代码如下:
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);
}
}
编辑:解决方案
一些答案将我指向创建通用类的最佳解决方案。但是,这在 WPF 中可能会出现问题。您必须跳过顶级泛型类的 XAML。
这意味着您可以在特定于类型的子类中执行 XAML,这不是您想做的事情(除非只有代码是您要重复使用的东西,但外观是可变的)。您也可以使用我猜的代码设计控件,但我不确定这会有多有效。
我被指向 IList 对象,它是许多其他人继承的抽象列表,我将使用它。这有点 hack,但由于它不会在开放库中使用,我可以接受。否则我会使用通用路由。
【问题讨论】:
-
有什么理由不能在 linq 中做到这一点?你的 .net 版本有限制吗?
-
什么 .net 版本。 Linq 和泛型应该能够做到这一点
-
我不明白 linq 在这里如何帮助我?请回答它是如何完成的。我正在使用 .net 3.5,但可能会升级到 4.0
标签: c# generics collections user-controls abstract-class