如何添加方法来操作类对象数组?

时间:2011-12-28 01:03:09

标签: c# arrays class methods

我不知道怎么说出这个问题,很抱歉,如果它真的没有意义,但它应该在这里开始有意义。此外,如果解决方案真的非常简单,我很抱歉。谷歌无法理解我的要求(因为我误解了原因:P)

所以我写了一个叫做OrderSelection

的课程

在我的程序中,我需要有一个OrderSelection对象数组,我需要对这个数组执行操作(重新排序,排序等)。

我现在正在做的是保持OrderSelection类中的方法,例如,接受您想要重新排序的数组。

类似的东西:

public void reorder(OrderSelection[] ord, int switchX, int switchY){....}

但我想要做的是:

OrderSelection[] order = new OrderSelection[10];
//do stuff
order.reorder(1,2);//which is WAY better than order[0].reorder(order, 1,2) as a horrid example

所以是的...我怎样才能添加这些我想要应用于我班级对象数组的函数?

谢谢!

3 个答案:

答案 0 :(得分:5)

您正在寻找扩展方法Here's the MSDN documentation.

编写扩展方法如下所示:

public static class OrderSelectionExtensionMethods
{
    public static void reorder(this OrderSelection[] orders, int x, int y) 
    {
        // Do something with each order
    }
}

扩展方法通常在完全独立的类中定义 此外,扩展方法还需要两件事:

  • 整个班级必须为static
  • 每个扩展方法的第一个参数必须包含关键字this

使用上面的代码,您的示例代码可以正常编译:

OrderSelection[] order = new OrderSelection[10];
//do stuff
order.reorder(1,2);

这与编写以下内容完全相同:

OrderSelection[] order = new OrderSelection[10];
//do stuff
OrderSelectionExtensionMethods.reorder(order, 1, 2);

答案 1 :(得分:1)

您应该创建自己的集合类,该类继承Collection<OrderSelection>并包含其他方法。

答案 2 :(得分:0)

我同意Slaks, 使用Generics并实现IEnumerable之类的接口,ICollection将使您的代码更清晰和可维护,例如,通过实现IEnumerable接口,可以使用foreach语句。 根据“OrderSelection”类的复杂性/大小,您可以决定执行排序等操作的最合适方式。 您可能需要查看:http://msdn.microsoft.com/en-us/library/system.collections.ilist.aspxhttp://support.microsoft.com/kb/320727

我希望这会有所帮助