使用参数传递方法作为参数的快速和脏的方法?

时间:2010-02-11 04:51:03

标签: c# methods parameters

让我先说明我对C#非常环保的事实。话虽这么说,我正在寻找一种方法来传递一个参数作为参数的方法。 理想情况,我想要做的是:

static void Main(string[] args)
{
    methodQueue ( methodOne( x, y ));
}

static void methodOne (var x, var y)
{
    //...do stuff
}

static void methodQueue (method parameter)
{
    //...wait
    //...execute the parameter statement
}

有人能指出我正确的方向吗?

5 个答案:

答案 0 :(得分:4)

Use an Action delegate

// Using Action<T>

using System;
using System.Windows.Forms;

public class TestAction1
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

答案 1 :(得分:4)

这应该做你想要的。它实际上是在函数中传递一个无参数的方法,但delegate(){methodOne(1,2);}正在创建一个匿名函数,它使用适当的参数调用methodOne。

我想在输入之前测试一下,但只有.net framework 2.0因此我的方法。

public delegate void QueuedMethod();

static void Main(string[] args)
{
    methodQueue(delegate(){methodOne( 1, 2 );});
    methodQueue(delegate(){methodTwo( 3, 4 );});
}

static void methodOne (int x, int y)
{

}

static void methodQueue (QueuedMethod parameter)
{
    parameter(); //run the method
    //...wait
    //...execute the parameter statement
}

答案 2 :(得分:2)

您可以使用Action delegate传递返回void的参数化方法。 然后你可以做这样的事情:


public void Main()
{
    MethodQueue(MethodOne);
} 
public void MethodOne(int x, int y) 
{
    // do stuff
}
public void MethodQueue(Action<int, int> method)
{
    // wait
    method(0, 0);
}
如果您的方法需要返回值,也可以使用Func委托。

答案 3 :(得分:2)

使用lambda语法,这几乎总是最简洁的方法。请注意,这在功能上等同于匿名委托语法

 class Program
 {
    static void Main(string[] args)
    {
        MethodQueue(() => MethodOne(1, 2));
    }

    static void MethodOne(int x, int y)
    {...}

    static void MethodQueue(Action act)
    {
        act();
    }


 }

答案 4 :(得分:0)

你也可以使用函数指针的纯C替代品,但这可能会有点混乱,尽管它的工作非常出色。