如何从方法返回操作类型
本文关键字:操作 类型 返回 方法 | 更新日期: 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);
}
}
}
问题是textAction
是Action<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();