列表方法创建

时间:2010-04-27 09:15:54

标签: c# .net collections

我正在创建一个我定义的对象列表,如此

List<clock> cclocks = new List<clocks>();

对于列表中的每个对象,我正在调用方法moveTime,就像这样

foreach(clock c in cclocks)
{
    c.moveTime();
}

是我可以写一些切肉刀的方式,所以我可以打电话

cclocks.moveTime();

然后它将通过列表执行该方法

我想我想创建一个收集方法?

我猜我必须要做一些事我只是不知道是什么。

感谢您的帮助

5 个答案:

答案 0 :(得分:3)

我不太确定,但也许你在谈论ForEach()

List<T>方法
cclocks.ForEach(c => c.MoveTime());

答案 1 :(得分:3)

您可以在List<T>上编写一个扩展方法,该方法会迭代this并在集合中的每个项目上调用moveTime()。有关详细信息,请参阅this article

但这种方法掩盖了很多信息。如果我是你,我会选择for-loop。如果你只是在每个对象上调用一个方法,你可以缩短for循环,如下所示:

// no need to declare scope if you're just doing one operation on the collection
foreach(var object in collection) object.method();

......或者使用LINQ:

collection.ForEach(object => object.method());

答案 2 :(得分:1)

您可以编写一个扩展方法来执行此操作。

http://msdn.microsoft.com/en-us/library/bb383977.aspx

答案 3 :(得分:0)

您可以从

创建继承的类
List<clock>

或为List<clock>

创建扩展方法

答案 4 :(得分:0)

另一个解决方案是从List<Clock>派生新类,然后添加所需的所有方法。像这样:

public class ClocksList : List<Clock>
{
   public void MoveSingleClock(Clock clock)
   {
      clock.MoveTime();
   }

   public void MoveAllClocks()
   {
      foreach(clock c in InnerList)
      {
         MoveSingleClock(c);
      }      
   }
}

你可以使用这样的新类:

ClocksList clocks = new ClocksList();

// Fill the list
clocks.Add(new Clock());
...
// Move time on all clocks
clocks.MoveAllClocks();

// Move single clock
Clock c = new Clock();
clocks.Add(c);
clocks.MoveSingleClock(c);