今天我正在研究一個TextToSpeech應用程序,並且遇到了一種情況,我需要檢查用戶選擇的語音是否安裝在計算機上。使用lambda表達式而不是foreach是不是很好?
對於這一點,我既可以使用一個的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);
的installedVoices是ReadOnlyCollection < InstalledVoice>從SpeechSynthesizer。
當然,lambda表達式看起來比foreach更清晰,但哪一個更好?
從我測試過的foreach似乎是稍微比lambda表達式更快。
此外,如果需要立即對InstalledVoice執行操作,foreach和lambda可以在將來擴展。
我可以告訴第一個片段搜索某個東西的第一個事件的唯一方法是通過查看* second *片段。應該回答這個問題。 –
這是一個偏好問題。和代碼一致性。和團隊共識。有一堆參數決定哪個更好。可讀性?性能? – Default
如果你想要一個布爾,你可以這樣做:'var foundVoice = installedVoices.Any(v => v.VoiceInfo.Name.Contains(selectedVoice)&& v.VoiceInfo.Culture.ToString()== selectedCulture);'This would與你的foreach真正相當。 – Mafii