如何从方法返回操作类型

本文关键字:操作 类型 返回 方法 | 更新日期: 2023-09-27 17:58:17

我正试图弄清楚如何从方法返回操作。我在网上找不到任何这样的例子。以下是我试图运行但失败的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            var testAction = test("it works");
            testAction.Invoke();    //error here
            Console.ReadLine();
        }
        static Action<string> test(string txt)
        {
            return (x) => Console.WriteLine(txt);
        }
    }
}

如何从方法返回操作类型

问题是textActionAction<string>,这意味着您需要传递一个字符串:

textAction("foo");

我怀疑你想要这样的东西:

class Program
{
    static void Main(string[] args)
    {
        var testAction = test();
        testAction("it works");
        // or textAction.Invoke("it works");
        Console.ReadLine();
    }
    // Don't pass a string here - the Action<string> handles that for you..
    static Action<string> test()
    {
        return (x) => Console.WriteLine(x);
    }
}

返回的操作接受string作为其参数。当你Invoke时,你需要提供这个参数:

testAction("hello world");

当然,您的操作会忽略该参数,因此更合适的解决方案是更改操作,使其不接受任何参数:

static Action test(string txt)
{
    return () => Console.WriteLine(txt);
}

现在,您的程序将按预期运行。

由于您拥有的是Action<String>,因此您的调用需要包括您在.上执行的字符串

testAction.Invoke("A string");

应该工作

要创建的操作应该是无参数的,这样就可以在没有参数的情况下调用它。因此,更改test的返回类型,并删除您声明但从未使用过的x

    static Action test(string txt)
    {
        return () => Console.WriteLine(txt);
    }

然后调用代码将工作:

        var testAction = test("it works"); // store the string in txt
        testAction.Invoke();
        Console.ReadLine();