无法将方法组分配给隐式类型的局部变量

31

我遇到了这个错误

"无法将方法组分配给隐式类型的本地变量"

出现在这段代码中

private async void Button_Click_2(object sender, RoutedEventArgs e)
{
    var frenchvoice = InstalledVoices.All.Where(voice => voice.Language.Equals("fr-FR") & voice.Gender == VoiceGender.Female).FirstOrDefault; // in this line
    sp.SetVoice(frenchvoice);
    await sp.SpeakTextAsync(mytxt);
}
2个回答

76

你忘记调用函数(使用()


25

您必须在调用方法FirstOrDefault时添加圆括号。

   var frenchvoice = InstalledVoices.All
       .Where(voice => voice.Language.Equals("fr-FR") && 
                       voice.Gender == VoiceGender.Female)
       .FirstOrDefault();

而且,虽然您的代码使用 & 运算符也可以正常工作,但在逻辑条件中正确使用的是 &&

顺便说一下,FirstOrDefault 接受与 Where 应用相同的 Lambda 表达式,因此您可以将代码简化为更简单、可能更快的形式。

   var frenchvoice = InstalledVoices.All
       .FirstOrDefault(voice => voice.Language.Equals("fr-FR") && 
                                voice.Gender == VoiceGender.Female);

1
感谢您的解释。我在将VB转换为C#时遇到了这个问题。在我看来,应该被标记为最佳答案。 - JohnnyBizzle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接