优雅地重构这样的代码(避免标记)

ono*_*nof 2 .net c# .net-4.0

我有一个在枚举上运行的函数,但第一项的函数应该有点不同,例如:

void start() { 
    List<string> a = ...
    a.ForEach(DoWork);
}

bool isFirst = true;

private void DoWork(string s) {
   // do something

   if(isFirst)
     isFirst = false;
   else
     print("first stuff");

   // do something
}
Run Code Online (Sandbox Code Playgroud)

你会如何重构这个以避免那个丑陋的旗帜?

msa*_*het 9

如果你真的想要用第一个项目做一些事情就可以解释Jimmy Hoffa的答案.

DoFirstWork(a[0])

a.Skip(1).ForEach(DoWork)

如果关键是它在逻辑上与列表的其余部分是分开的,那么你应该使用一个单独的函数.