如何将Action提取到成员函数中?

时间:2012-08-03 07:37:25

标签: c# .net linq lambda

我有这段代码:

class SomeClass {
    void someFunction()
    {
          Action<string> myAction = (what)=>
          {
             //whatever
          }
          new List<string>().ForEach(myAction);
    }
}

我想将myAction中的代码提取到一个单独的成员函数中。

我该怎么做?

4 个答案:

答案 0 :(得分:7)

class SomeClass
{
    void someFunction()
    {
        Action<string> myAction = Whatever;
        new List<string>().ForEach(myAction);
    }

    public void Whatever(string what)
    {
        // ... whenever
    }
}

或直接,没有定义本地Action<string>变量(无论如何可能会在发布模式中进行优化):

new List<string>().ForEach(Whatever);

答案 1 :(得分:3)

你在找这个吗?

class SomeClass { 
    void someFunction() 
    { 
          new List<string>().ForEach(SeparateMemberFunction); 
    }
    void SeparateMemberFunction(string s)
    {
        //whatever
    } 
} 

答案 2 :(得分:2)

这应该是等价的:

class SomeClass {

    void myAction(string what)
    {
        // whatever
    }

    void someFunction()
    {
          new List<string>().ForEach(item => myAction(item));
    }
}

由于Action<string>表示a method with a string parameter which does not return a value

答案 3 :(得分:1)

我用不同的方式:

class SomeClass
{
    public void SomeFunction()
    {               
        new List<string>().ForEach(e => this.MyAction(e));
   }

    private void MyAction(string str){ /* ... */ }
}

我觉得更清楚,因为我第一眼就看到MyAction是一种方法而不是fieldproperty