当我尝试运行以下代码时,它告诉我“无法转换为' 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])));
}
答案 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());