C# - 通用行动?

时间:2013-06-21 18:14:44

标签: c# generics delegates action

我正在使用.NET Framework 4.0。查看Action(http://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.100).aspx)的文档,他们给出了将委托与Action进行比较的示例:

delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
    public static void Main()
    {
        DisplayMessage messageTarget;
        ...
    }
}

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

但是,如何使用Action而不是委托来创建它?

delegate void DisplayMessage<T>(T message);

public class TestCustomDelegate
{
    public static void Main()
    {
        DisplayMessage<string> messageTarget;
        ...
    }
}

编辑:我忘记了messageTarget声明中的类型定义。现在添加它。

2 个答案:

答案 0 :(得分:4)

您的委托与Action<T>完全相同,但名称不同。

你可以用同样的方式使用它。

答案 1 :(得分:1)

对于现有方法(如DisplayMessage)

public void DisplayMessage<T>(T message)
{
    //do stuff with s
    if (message is string)
    {
        Console.WriteLine(message);
    }
}

Action<string> messageTarget = new Action<string>(DisplayMessage);
messageTarget.Invoke("Testing");  //or use beginInvoke/endInvoke

也可以使用lambda:

Action<string> messageTarget = new Action<string>(s =>
                {
                    //do stuff with s                    
                    Console.WriteLine(s);
                });
messageTarget.Invoke("Testing");  //or use beginInvoke/endInvoke