2010-03-29 14 views
1

在C#中了解Action委托后,我一直在寻找可以在代码中最好使用它的方法。我想出了这个模式:.NET中的传统循环与动作委托

Action<string> DoSomething = (lSomething) => 
{ 
    // Do something 
}; 

DoSomething("somebody"); 
DoSomething("someone"); 
DoSomething("somewhere"); 

如果我已经使用了传统的循环,它看起来是这样的:

List<string> lSomeList = new List<string>(); 
lSomeList.Add("somebody"); 
lSomeList.Add("someone"); 
lSomeList.Add("somewhere"); 

foreach (string lSomething in lSomeList) 
{ 
    // Do something 
} 

有没有两者之间有什么明显的区别?对我而言,他们看起来同样容易理解和维护,但是我可以使用其他一些标准来区分何时可以优先于其他人吗?

回答

4

如果您需要能够将动作从一段代码传递到另一段代码,那么将它包装在委托中是非常好的。

如果您需要在同一个方法内稍有不同的上下文中同一个动作,一个代表是一个选项 - 尽管它解压到一个不同的方法可能更有意义,视情况而定。

通常我只是直接去执行代码。你给出的例子并不是特别真实的IMO - 通常你会有一个列表,无论是拨打还是使用普通的foreach循环 - 在这一点上,我倾向于使用foreach循环,原因与Eric Lippert在安东尼联系的博客文章中给出。

0

第一种模式有一个优点,它不会出现循环。例如:

Action<string> DoSomething = (lSomething) => 
{ 
    // Do something 
}; 

DoSomething("somebody"); 

if (b) DoSomething("somebody2"); 
else while (F()) DoSomething("somebody3") 

... 

所以你看到的λ版本是更加灵活,因为它可以在多发场所调用,而不是只在一个地方。