今日、私はTextToSpeechアプリを開発していました。ユーザーが選択した音声がコンピュータにインストールされているかどうかを確認する必要があります。このためforeachの代わりにラムダ式を使用するのは良い方法ですか?
、私はforeachの使用することができ、次のいずれか
bool foundVoice = false;
foreach (var v in installedVoices)
{
if (v.VoiceInfo.Name.Contains(selectedVoice) && v.VoiceInfo.Culture.ToString() == selectedCulture)
{
foundVoice = true;
break;
}
}
または、ラムダ式:installedVoices
var foundVoice = installedVoices.FirstOrDefault(v => v.VoiceInfo.Name.Contains(selectedVoice) && v.VoiceInfo.Culture.ToString() == selectedCulture);
をSpeechSynthesizerからReadOnlyCollection < InstalledVoice>です。
確実に、ラムダ式はforeachよりもきれいに見えますが、どちらが優れていますか?
私がforeachをテストしたところからは、のようにわずかにがラムダ式より速いようです。
また、InstalledVoiceに即座に対応する必要がある場合は、foreachとlambdaの両方を将来拡張することができます。
最初のスニペットが何かの最初の出現を検索する唯一の方法は、* second *スニペットを見ることです。どちらがその質問に答えるべきですか。 –
それは好みの問題です。コード一貫性そして、チームコンセンサス。どちらが「より良い」かを決める一連のパラメータがあります。読みやすさ?パフォーマンス? – Default
ブールが必要な場合は、次のようにすることができます: 'var foundVoice = installedVoices.Any(v => v.VoiceInfo.Name.Contains(selectedVoice)&& v.VoiceInfo.Culture.ToString()== selectedCulture);'これはあなたのforeachに相当する真のものになります。 – Mafii