将参数传递给方法并分配给类型 Func<bool>

Passing parameter to a method and assigning to type Func<bool>

我目前有一个类似这样的方法

 public static bool test(string str);

我想把这个方法分配给这个类型

 Func<bool> callback

我正在尝试这样做(这是不正确的)

callback = test("Str");

以上内容不正确,因为我正在调用方法的 C# 内容。我如何告诉它使用参数 Str 调用该方法?在 C++ 中我们可以这样做

std::function<...,..,"str">

我们如何在 C# 中做类似的事情?

您应该将函数声明为:

Func<string, bool> callback

表示它引用的方法消耗一个string和returns一个bool.

然后你可以稍后做:

callback = s => test(s);

或内联:

Func<string, bool> callback = s => test(s);

如果您的目标是始终使用相同的字符串参数调用回调(而不是每次都使用不同的参数),您可以这样声明它:

Func<bool> callback = () => test("Str");
var result = callback();

但是如果您打算每次都传递不同的字符串值,那么您需要 Func<string, bool>:

Func<string, bool> callback = s => test(s);
var result = callback("Str");

让我看看我是否知道你在说什么。在 C++ 中,我们有 'function pointers' 并且它们是用特定的签名声明的。要在 C# 中使用 delegate 关键字进行等效操作。

这是一个快速的功能代码示例:

    class DelegateExample
    {
        // A delegate is a prototype for a function signature.
        // Similar to a function pointer in C++.
        delegate bool MyDelegate(string[] strings);

        // A method that has that signature.
        bool ListStrings(string[] strings)
        {
            foreach (var item in strings)
            {
                Console.WriteLine(item);
            }
            return strings.Length > 0; // ... for example
        }

        // Different method, same signature.
        bool Join(string[] strings)
        {
            Console.WriteLine(string.Join(", ", strings));
            return strings.Length > 0; // ... for example
        }

        public void TryIt()
        {
            string[] testData = { "Apple", "Orange", "Grape" };

            // Think of this as a list of function pointers...
            List<MyDelegate> functions = new List<MyDelegate>();

            functions.Add(ListStrings); // This one points to the ListStrings method
            functions.Add(Join);        // This one points to the Join method

            foreach (var function in functions)
            {
                bool returnVal = function(testData);
                Console.WriteLine("The method returned " + returnVal + Environment.NewLine);
            }
        }
    }

您可以 运行 控制台应用程序中的示例,如下所示:

class Program
{
    static void Main(string[] args)
    {
        new DelegateExample().TryIt();
        Console.ReadKey();
    }
}

这给出了这个输出:

Apple
Orange
Grape
The method returned True

Apple, Orange, Grape
The method returned True

希望对您有所帮助!