2008-09-07 5 views
4

.netのゲームに比較的新しいので、LINQの使用とより伝統的な方法で動作するものとの間に長所/短所の経験があった人はいますか?リスト/コレクションはありますか?LINQと伝統的なコレクションベースのアプローチ間の長所と短所

私が取り組んでいるプロジェクトの具体例として、リモートWebサービスから一意のIDと名前のペアのリストが取得されています。

  • このリストは
  • は、読み取り専用になり、
  • は、すべてのアプリケーションレベルで保存され使用されているアプリケーションの観点から、(一日一回)まれに変化しますアクセス要求

これらの点を考慮して、返された値をシングルトンクラスのアプリケーションレベルに格納する予定です。

私の最初のアプローチは、IDに基づいて、コレクションから取得するメソッドで、リモートサービスから返されたリストを反復処理し、シングルトンクラスにNameValueCollectionの中でそれを保存することでした:

sugarsoap soapService = new sugarsoap(); 
branch_summary[] branchList = soapService.getBranches(); 

foreach (branch_summary aBranch in branchList) 
{ 
    branchNameList.Add(aBranch.id, aBranch.name); 
} 

代替LINQは、単にそれが取り出された後、直接リスト上で動作するメソッドを追加することで使用して:

public string branchName (string branchId) 
{ 
    //branchList populated in the constructor 
    branch_summary bs = from b in branchList where b.id == branchId select b; 
    return branch_summary.name; 
} 

は他よりも良いのどちらかである - 第三の方法はありますか?私はすべての答えに、両方のアプローチについて、そして優雅さを提供するソリューションと、パフォーマンスに恩恵を受けるソリューションの両方について、どちらもオープンです。

答えて

3

私はむしろそれができるという理由でLINQを使用したい)、それは

public string branchName (string branchId) 
{ 
    //branchList populated in the constructor 
    branch_summary bs = (from b in branchList where b.id == branchId select b).FirstOrDefault(); 
    return branch_summary == null ? null : branch_summary.name; 
} 

ノート.FirstsOrDefault(する必要があるだろう、あなたが書いたLINQは、コンパイルと思う

いけません他の場所で使用され、より複雑なフィルタをデータに書き込むことができます。私はまた、NameValueCollectionの代替案より読みやすくすると思います。私は$一般に

0

シングルトンクラスが絶対に必要であるかどうかはわかりませんが、常にグローバルアクセスが絶対必要ですか?リストは大きいですか?

プロパティを変更する必要がある場合のシングルトンクラスのリフレッシュメソッドと、リストが変更されたときに更新するようにシングルトンに通知する何らかの方法があるとします。

両方の解決策が実行可能です。私はLINQは、コンストラクタでコレクションをより速く(しかし、顕著に速くはない)配置すると思います。伝統的なコレクションベースのアプローチは問題ありません。個人的には、私はLINQバージョンを選択します。なぜならそれは新しい技術であり、私はそれを使いたいからです。あなたの展開環境が.NET 3.5を持っていると仮定します...

Idによってブランチを取得する方法はありますか?ブランチ情報がまれに必要とされる場合は、これが第3の選択肢になります。

1

0.02、/ foreachループのためのあなたの単純な1行はLINQのを使用するよりも速くなりますです

。また、Linqはこのケースでは重要な読みやすさの改善を提供していません。

アルゴリズムがLinqなしで書込みおよび保守するのに十分単純で、遅延評価を必要としない場合は、 Linqでは十分な保守性が改善されていないため、それを使用する。しかし、Linq が非常にのコードの可読性と正確性を向上させる場合があります。これは、herehereという2つの例を示しています。

0

短縮とworkified:

public string BranchName(string branchId) 
{ 
    var bs = branchList.FirstOrDefault(b => b.Id == branchId); 

    return bs == null ? null : bs.Name; 
} 
関連する問題