【问题标题】:How to add methods to manipulate an array of class objects?如何添加方法来操作类对象数组?
【发布时间】:2012-01-28 20:47:26
【问题描述】:

我不知道如何表达这个问题,如果它真的没有意义,很抱歉,但它应该从这里开始有意义。另外,如果解决方案真的非常简单,我很抱歉。 Google 无法理解我在问什么(可能是因为我问错了: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

所以是的...如何添加这些我想应用到我的类的对象数组的函数?

谢谢!

【问题讨论】:

  • .Net 公共成员名称应为 UpperCamelCased。
  • 不太清楚你在说什么。我不太喜欢这种东西的“常见做法”。

标签: c# arrays class methods


【解决方案1】:

您正在寻找扩展方法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);

【讨论】:

  • @codesparkle 哈哈,我完全明白你的意思!该死的,小小的智能手机键盘,该死的,自动更正!
【解决方案2】:

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

【讨论】:

  • 是的,这绝对是比创建扩展方法更好的解决方案。
  • @ScottRippey 你在讽刺吗?哈哈,可扩展的东西太容易了
  • @Toadums 不是讽刺。我喜欢创建扩展方法,但它不像创建自定义集合那样有条理和可重构。自定义集合说“这里有一堆对象,还有一堆你可以用这些对象做的标准事情”。但是扩展方法说“这里有一堆用这些对象做标准事情的快捷方式”。在导入正确的命名空间之前,您永远不知道是否存在扩展方法,但集合方法始终存在。它们使用的代码量大致相同。
  • @Toadums 虽然我同意这是最好的解决方案 ...它显然没有回答问题,所以我不赞成.
  • @Scott Rippey 是的,这就是你仍然得到复选标记的原因。我不知道如何使这些人的解决方案发挥作用。你的简直太容易了哈哈
【解决方案3】:

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2011-12-10
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多