C#传递函数作为参数

C#传递函数作为参数,c#,C#,不幸的是,我看不到类似的问题,所以 我必须执行许多类似的函数,我想创建一个函数,该函数将接受函数作为参数,例如 int Search (Func<bool> func) { int start = Environment.TickCount; func(); int end = Environment.TickCount; return end - start; } void Searc

不幸的是,我看不到类似的问题,所以

我必须执行许多类似的函数,我想创建一个函数,该函数将接受函数作为参数,例如

    int Search (Func<bool> func)
    {
        int start = Environment.TickCount;
        func();
        int end = Environment.TickCount;
        return end - start;
    }

    void SearchTime()
    { 
        int time1 = Search(list.Contains(item));
        int time2 = Search(dictionary.ContainsKey(anotheritem));
        /* some more code */
    }
int搜索(Func-Func)
{
int start=Environment.TickCount;
func();
int end=Environment.TickCount;
返回结束-开始;
}
无效搜索时间()
{ 
int time1=搜索(list.Contains(item));
int time2=搜索(dictionary.ContainsKey(anotheritem));
/*还有代码吗*/
}
但实际上它说这个论点似乎不正确


UPD:错误显示:
最合适的重载方法有一些无效参数

您试图发送到方法中的不是委托

可以使用lambda表达式为方法创建委托:

int time1 = Search(() => list.Contains(item));
int time2 = Search(() => dictionary.ContainsKey(anotheritem));
()
表示零输入参数。

您所做的:

Search(list.Contains(item));
这将首先计算内部表达式
list.Contains(item)
,它是一个布尔值,而不是一个具有布尔返回值的函数。接下来,该值而不是函数将被传递到
Search()
,这是不可能的,并且会导致编译器错误

您有两种选择:使用Guffa已经提到的lambda表达式:

class Program
{
    static void Main(string[] args)
    {
        SearchTime();
    }

    static int Search(Func<bool> func)
    {
        int start = Environment.TickCount;
        func();
        int end = Environment.TickCount;
        return end - start;
    }

    static void SearchTime()
    {
        IList<string> list = new []{"item"};
        IDictionary<string, string> dictionary = new Dictionary<string, string> { { "key", "value" } };

        int ticks1 = Search(() => list.Contains("item")); // Note: use () =>
        int ticks2 = Search(() => dictionary.ContainsKey("key")); // Note: use () =>
        /* some more code */
    }
}

请提供错误消息。@B.K.我实际上没有相同的in参数,我使用现有的funcs,但Guffa给出了确切的答案。也许是相似的,但我在这个问题上找不到答案
class Program2
{
    static void Main(string[] args)
    {
        SearchTime();
    }

    static int Search(Func<bool> func)
    {
        int start = Environment.TickCount;
        func();
        int end = Environment.TickCount;
        return end - start;
    }

    static void SearchTime()
    {
        int ticks1 = Search(ListContains); // Note: do not use () on ListContains
        int ticks2 = Search(DictionaryContainsKey); // Note: do not use () on DictionaryContainsKey
        /* some more code */
    }

    static IList<string> list = new[] { "" };
    static bool ListContains()
    {
        return list.Contains("item");
    }

    static IDictionary<string, string> dictionary = new Dictionary<string, string> {{"key","value"}};
    static bool DictionaryContainsKey()
    {
        return dictionary.ContainsKey("key");
    }
}