C# List.Foreach()投诉无法从';无效';至';对象';
当我尝试运行下面的代码时,它告诉我最后一行的“无法从'void'转换为'object',有人知道代码有什么问题吗 提前谢谢C# List.Foreach()投诉无法从';无效';至';对象';,c#,.net-core,C#,.net Core,当我尝试运行下面的代码时,它告诉我最后一行的“无法从'void'转换为'object',有人知道代码有什么问题吗 提前谢谢 public static void Main(string[] args) { string s = "asfdsanfdjsajfois"; Dictionary<char, int> dict = new Dictionary<char, int>(); s.ToCharArray().ToList().ForEach(
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])));
}
publicstaticvoidmain(字符串[]args)
{
字符串s=“asfdsanfdjsajfois”;
Dictionary dict=新字典();
s、 ToCharArray().ToList().ForEach(a=>{
主语[a]=(主语[a])?主语[a]+1:1;
});
pln(dict.Keys.ToList().ForEach(a=>Console.WriteLine(dict[a]));
}
问题很明显,无需提供更多信息:
dict.Keys.ToList().ForEach(a=>Console.WriteLine(dict[a])
是一条不返回任何void
的语句,您将其传递给pln
函数,该函数接受对象类型的参数。您需要为该类型向它传递一个对象,以使编译器满意,并使代码有意义。查看这一部分:.ForEach(a=>Console.WriteLine(dict[a])
;通过它,您可以迭代字典中的每个键,并将它们打印到控制台。实际上是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));
如果要将值作为列表传递,则方法签名将为:
private static void pln(List<int> p)
{
// Do something here
}
私有静态无效pln(列表p)
{
//在这里做点什么
}
对此,查询将类似于pln(dict.Select(a=>a.Value).ToList());
无需调用s.tocharray().ToList()).ForEach
当你可以直接调用s.ForEach
@jmchilinney呃?ForEach
仅在列表中定义。其他IEnumerable
没有它。普通ForEach
可以工作,但不是你建议的。哦,那真是太傻了……我把它放在pln方法中了……哈哈哈,谢谢everyone@hvd哎呀,我nts.ToList().ForEach
.AString
已经是IEnumerable(字符)
,因此不需要调用ToCharArray
。