List.Foreach()投诉无法转换为' void'对象'

时间:2017-01-24 06:29:53

标签: c# .net-core

当我尝试运行以下代码时,它告诉我“无法转换为' void'对象'在最后一行,是否有人知道代码有什么问题?

提前致谢。

public static void Main(string[] args)
{
    string s = "asfdsanfdjsajfois";
    Dictionary<char, int> dict = new Dictionary<char, int>();
    s.ToCharArray().ToList().ForEach(a => {
        dict[a] = (dict.ContainsKey(a)) ? dict[a]+1 : 1;
    });
    pln(dict.Keys.ToList().ForEach(a => Console.WriteLine(dict[a])));
}

2 个答案:

答案 0 :(得分:3)

问题很明显,没有提供更多信息:

RUN powershell -NoProfile -Command certmgr.exe -add MyCert.cer -s -r localMachine trustedpublisher 是一个不返回任何内容dict.Keys.ToList().ForEach(a => Console.WriteLine(dict[a]))的语句,并且您将其传递给void函数,该函数接受并且{{1}类型的参数}。你需要传递一个该类型的对象,以使编译器满意并使代码有意义。

答案 1 :(得分:0)

看一下这部分:.ForEach(a => Console.WriteLine(dict[a]);通过这个,您将遍历Dictionary中的每个键并将它们打印到控制台。实际上Console.WriteLine()方法的返回类型是void,这意味着它没有返回任何内容。但是你试图将一些东西传递给一个名为pln的方法但是在问题中没有指明方法是如何定义的,或者在该方法中预期的值是什么。

实际上你不需要遍历键然后收集值,你可以直接获取这样的值:

dict.Select(x=>x.Value).ToList()

如果您需要将每个值传递给计划方法,则应修改pln方法签名,如下所示:

 private static void pln(int p)
 {
     Console.WriteLine(p);
    // Do something here
 }

为此,查询将类似于dict.ToList().ForEach(x => pln(x.Value));

如果要将值传递给List,则方法签名将为:

private static void pln(List<int> p)
{
  // Do something here
}

为此,查询将类似于pln(dict.Select(a => a.Value).ToList());