使用lambda表达式而不是foreach是一种好的做法吗

本文关键字:一种 表达式 lambda foreach 使用 | 更新日期: 2023-09-27 17:58:42

今天我在开发TextToSpeech应用程序时遇到了一种情况,我需要检查用户选择的语音是否安装在计算机上。

为此,我可以使用foreach

bool foundVoice = false;
foreach (var v in installedVoices)
{
    if (v.VoiceInfo.Name.Contains(selectedVoice) && v.VoiceInfo.Culture.ToString() == selectedCulture)
    {
        foundVoice = true;
        break;
    }
}

λ表达式

var foundVoice = installedVoices.FirstOrDefault(v => v.VoiceInfo.Name.Contains(selectedVoice) && v.VoiceInfo.Culture.ToString() == selectedCulture);

安装的Voices是一个ReadOnlyCollection<SpeechSynthesizer中的InstalledVoice>

当然,lambda表达式看起来比foreach更干净,但哪一个更适合实践?

根据我测试的结果,foreach似乎比lambda表达式快一点。

此外,如果需要立即对InstalledVoice执行操作,那么foreach和lambda都可以在将来进行扩展。

使用lambda表达式而不是foreach是一种好的做法吗

lambda表达式看起来比foreach更干净,但哪一个更适合实践呢?

"看起来更干净"是一个更好的实践的完美指标。根据所使用的语言设施,性能以有意义的方式发生变化的情况极为罕见,因此可读性是衡量特定结构对代码有多好的最重要指标。可读性是最终决定代码可维护性的因素,即使代码的唯一读者是您。

请注意,这是一个逐案的决定,因为lambda在一种情况下可能更好,而循环在另一种情况中可能更好。

是的,在这种情况下使用LINQ是一种很好的做法,因为它更可读。然而,对我来说,installedVoices.Any而不是installedVoices.FirstOrDefault将更具可读性。