12

Appleプロパティリスト(プロパティリスト)パーサー(バイナリ、JSON、およびXML)にLINQサポートを追加して、.と同じようにSQLのようなクエリを使用できるようにしますSystem.Xml。ファイルを完全に解析し、ヒープに保存することで機能します。(System.Xmlそうです)。

私はグーグルをしていて、それのどれも理解できないようです(私はたくさんのUsing LINQ to SQL Classesページを手に入れます)。MSDNのガイド、私も理解していません。私は何をする必要がありますか?

4

3 に答える 3

25

LINQを実装するということは、LINQがそこにあると期待するメソッド(WhereまたはSelect、など)を正しい署名で実装することを意味します。IEnumerable一般的な認識にもかかわらず、 LINQをサポートするためにクラスのインターフェイスを実装する必要はありません。ただし、実装IEnumerableすると、クラスのLINQメソッドのセット全体がほぼ無料で自動的に取得されます。実装する必要があるのは、クラスと1つだけです。EnumerableGetEnumeratorIEnumerator

イテレータパターンIEnumerableについてのこの投稿では、私のブログに実装する方法についていくつかの例があります。

ただし、クラスを列挙可能にすることが意味をなさない場合は、そうする必要はありません。適切なLINQメソッドを直接実装する必要があります。LINQは、C#がコンパイルされる限り、メソッドがどのように定義されるかを実際には気にしません。つまり、次のように記述します。

from p in myPlist where p.Thing == "Thing" select p;

C#コンパイラはこれを次のように変換します。

mpPlist.Where(p => p.Thing == "Thing").Select(p => p);

それがコンパイルされる限り、LINQは機能します。メソッドの正しいシグネチャを確認するには、MSDNドキュメントのLINQクエリメソッドのリストを参照してください。PList例(あなたがのリストであると仮定しますPListItem):

public class PList
{
  public IEnumerable<PListItem> Where(Func<PListItem, bool> predicate)
  {
    foreach (var item in this.items)
    {
      if (predicate(item)) 
      {
        yield return item;
      }
    }
  }
}

この方法でLINQを直接実装すると、動作をより細かく制御できますが、正しく実行するにはさらに多くの作業が必要になります。また、戻り値の意味を理解したり、LINQ呼び出しを連鎖させたりする必要があります。クラスの実装IEnumerableを回避し、C#にすべての作業を任せることができれば、作業ははるかに簡単になります。

于 2012-06-17T03:23:27.167 に答える
1

オブジェクトへのLINQは、から継承するすべてのクラスで機能するため、IEnumerable<t>クラスでそのインターフェイスを継承し、GetEnumerableメソッドを定義するだけで十分です。

次のリンクは、IEnumerableインターフェイスの実装方法について説明しています(LINQについては言及されていませんが、機能します): http ://codebetter.com/davidhayden/2005/03/08/implementing-ienumerable-and-ienumerator-on- your-custom-objects /

于 2012-06-17T02:57:54.047 に答える
1

最初にIEnumerableを実装する必要があります。最初にお読みください-http://msdn.microsoft.com/en-us/library/9eekhta0.aspx

于 2012-06-17T03:04:34.913 に答える