Heute habe ich an einer TextToSpeech App gearbeitet und ich bin auf eine Situation gestoßen, in der ich prüfen muss, ob die ausgewählte Stimme des Benutzers auf dem Computer installiert ist.Ist es empfehlenswert, Lambda-Ausdrücke anstelle von foreach zu verwenden?
Dafür konnte ich entweder einen foreach:
bool foundVoice = false;
foreach (var v in installedVoices)
{
if (v.VoiceInfo.Name.Contains(selectedVoice) && v.VoiceInfo.Culture.ToString() == selectedCulture)
{
foundVoice = true;
break;
}
}
Oder eine lamda Ausdruck:
var foundVoice = installedVoices.FirstOrDefault(v => v.VoiceInfo.Name.Contains(selectedVoice) && v.VoiceInfo.Culture.ToString() == selectedCulture);
Die installedVoices ist ein Readonlycollection < InstalledVoice> von Speechsynthesizer.
Definitiv sieht der Lambda-Ausdruck sauberer aus als der foreach, aber welcher ist besser?
Von was ich getestet habe scheint die foreach leicht schneller als der Lambda-Ausdruck zu sein.
Außerdem können sowohl foreach als auch lambda in der Zukunft erweitert werden, wenn sofortige Maßnahmen auf InstalledVoice erforderlich sind.
Der einzige Weg, ich kann sagen, dass das erste Snippet nach dem ersten Vorkommen von etwas sucht, ist, indem Sie das * zweite * Snippet sehen. Was sollte die Frage beantworten. –
Es ist eine Frage der Präferenz. Und Code-Konsistenz. Und Teamkonsens. Es gibt eine Reihe von Parametern, die entscheiden, was "besser" ist. Lesbarkeit? Performance? – Default
Wenn Sie eine bool wollen, könnten Sie tun: 'var foundVoice = installedVoices.Any (v => v.VoiceInfo.Name.Contains (selectedVoice) && v.VoiceInfo.Culture.ToString() == selectedCulture);' Dies würde sei das wahre Äquivalent zu deiner Foreach. – Mafii