关于C#:无法将类型隐式转换为Func

Cannot implicitly convert type to Func

我正在尝试编写一个异步应用程序以从(远程)库中获取值。 我偶然发现了一个操作方法,给出了错误"无法将类型隐式转换为Func"。

我尝试了各种返回类型...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    private static void CallAsynch2()
    {
        var tasks = new List<Task<KeyValuePair<int,string>>();

        for (int i = 0; i < Iterations; i++)
            tasks.Add(Task<KeyValuePair<int, string>>.Factory.StartNew(GetValueAction(i)));

    }

    private static Func<KeyValuePair<int, string>> GetValueAction(int i)
    {
        return new KeyValuePair<int, string>(i, i.ToString());
        //return ClassLibraryService.RandomValue.GetRandomValue(i);
    }

我希望它返回值以填充字典。


返回KeyValuePair

1
return new KeyValuePair<int, string>(i, i.ToString());

您要返回它的Func -tion:

1
return () => new KeyValuePair<int, string>(i, i.ToString());

Func是匿名方法。
这意味着,您给它零或一些值,并期望得到回报。

在这一行:

1
return new KeyValuePair<int, string>(i, i.ToString());

您采用KeyValuePair类型的对象,并尝试将其用作匿名方法。
由于种种原因这不能工作,但是为什么会吹这个答案。

在您的情况下,您需要一个匿名方法,该方法接受零个参数并返回KeyValuePair。
正确的代码是:

1
return () => new KeyValuePair<int, string>(i, i.ToString());

注意"()=>"语法。
这是一个lamda表达式,它隐式转换为Func。