【发布时间】:2012-03-27 22:38:30
【问题描述】:
我有以下通用自定义集合:
public class XList<Object> : List<Object>
{
public XList() : base()
{
}
public XList(Object[] values) : base(values)
{
}
public void Add(XList<Object> inputObjects)
{
if (inputObjects == null) { return; }
if (inputObjects.Count == 0) { return; }
foreach (Object currentObject in inputObjects) { Add(currentObject); }
}
}
我成功地使用了这个集合,它是具有多种数据类型的通用方法。例如:
XList<int>
XList<String>
XList<XFolder>
(XFolder 是一个引用文件夹的自定义类)
现在我想在上述类中嵌入一个特定于 XFolder 列表的方法。例如,一种从最长到最小路径对文件夹进行排序的方法。我是否必须创建一个新的自定义集合,还是可以在上面的类中创建,以便保留其通用属性/方法?
编辑:为了避免误解
@Matt Burland:我不是指异类收藏。异构集合是在同一个集合中存储不同数据类型的集合。我心目中的每个集合在同一个集合中存储相同类型的数据,但可以在不同的集合中存储不同类型的数据(相同类型,即XList)。
我的问题是我希望能够根据它们的类型为每个集合执行不同的方法:
整数集合应该有数学方法(例如将所有数字相加)
字符串集合应该有字符串方法(例如按字母顺序排序字符串)
食物的集合应该有适用于食物的方法(按食物类型分组)
我希望能够在我的主程序中执行以下操作:
XList<int> myNumberList = new XList<int>; myNumberList.Add(....//fill list with integers
XList<String> myStringList = new XList<String>; myStringList.Add(....//fill list with strings
XList<Food> myFoodList = new XList<Food>; myFoodList.Add(....//fill list with foods
int sumOfNumbers = myNumberList.sum();
myStringList.sort();
XList<Food> mySweetFoodList = myFoodList.getSweets();
在这个例子中,我所有的集合都是 XList 集合。但它们根据类型有不同的方法:
XList 有一个 sum() 方法
XList 有一个 sort() 方法
XList 有一个 getSweets() 方法
我不知道这是否可能。我什至不知道我的想法是否正确。目前我坚持使用 JaredPar 的答案并使用 XListExtension
【问题讨论】:
-
I have the following generic custom collection通用? msdn.microsoft.com/en-us/library/512aeb7t(v=vs.80).aspx -
您可能希望使用
Object以外的其他名称来标识您的通用参数。也许TObject. -
是的,你应该使用泛型,如果你想对类型 T 有更多的可见性,请查看约束:msdn.microsoft.com/en-us/library/d5x73970.aspx
-
@GiorgioMinardi - 想提供一个例子来说明约束如何在这里提供帮助?
-
所谓泛型是指它是一个对象列表,具体可以是 int、String 或其他对象类型。该类的方法适用于其中任何一个。但是,如果我想创建仅适用于特定对象类型的方法呢?
标签: c# collections