2016-07-26 1 views
6

今日、私は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の両方を将来拡張することができます。

+0

最初のスニペットが何かの最初の出現を検索する唯一の方法は、* second *スニペットを見ることです。どちらがその質問に答えるべきですか。 –

+8

それは好みの問題です。コード一貫性そして、チームコンセンサス。どちらが「より良い」かを決める一連のパラメータがあります。読みやすさ?パフォーマンス? – Default

+1

ブールが必要な場合は、次のようにすることができます: 'var foundVoice = installedVoices.Any(v => v.VoiceInfo.Name.Contains(selectedVoice)&& v.VoiceInfo.Culture.ToString()== selectedCulture);'これはあなたのforeachに相当する真のものになります。 – Mafii

答えて

7

ラムダ式はforeachよりもきれいに見えますが、どちらが優れていますか?

「Looks cleaner」は、より良いプラクティスの完全な指標です。意味のある方法で、使用する言語機能に応じてパフォーマンスが変化することは非常にまれです。したがって、コードの特定の構造がどれだけ優れているかの可読性が最も重要な指標です。読みやすさは、コードの唯一の読者があなたであっても、コードの保守性を最終的に決定するものです。

これはケースバイケースの決定です.1つの状況でlambdasが改善され、別の状況ではループが改善される可能性があるためです。

4

はい、この場合はLINQを使用することをお勧めします。これは読みやすいためです。しかし、私にはinstalledVoices.Anyの代わりにinstalledVoices.FirstOrDefaultが読めるようになります。

+2

また、 '.Any'は彼のforeachと論理的に同等です。 – Mafii

+0

何がインストールされますお使いのコンピュータに問題が発生しましたか? –

+0

@CatalinHoha trueを返します。 –

関連する問題