C#中的高阶函数返回void

时间:2020-09-23 14:59:52

标签: c# higher-order-functions

我在理解C#中的HOF时遇到了一些问题。我希望我的DoSomething函数将函数作为参数返回 void 并接收两个字符串。由于编译器抱怨,我无法将第一个通用参数设置为void。这给了我一个错误。

在C#中执行此操作的正确语法是什么?

using System.IO;
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("Hello, World!");
        DoSomething((v1, v2) => Console.WriteLine(v1, v2));
    }
    
    private static void DoSomething(Func<string,string,string> f){
        f("1", "2");
    }
}

1 个答案:

答案 0 :(得分:9)

基本上使用Action<string, string>代替Func<string, string, string>Action个委托声明为返回voidFunc代表被声明返回“最终类型参数”。

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("Hello, World!");
        DoSomething((v1, v2) => Console.WriteLine(v1, v2));
    }

    private static void DoSomething(Action<string, string> action)
    {
        action("1", "2");
    }
}

请注意,这里的结果只是“ 1”,因为它被解释为格式字符串。如果您改用action("Value here: '{0}'", "some-value");,则会得到Value here: 'some-value'的输出。