12

かなり後輩の開発者として、私は経験不足と知識の穴を浮き彫りにする問題に直面しています。ここの前文が長すぎる場合は失礼します。

私は、LINQ(このプロジェクトの目的のためにOBJECTSおよびXML)を含む多くの新しい(私にとって)テクノロジーを学ぶ必要があるプロジェクトに自分自身を見つけました。これまで読んだことはすべて、LINQを利用するには、以下(デリゲート、匿名メソッド、ラムダ式)を完全に理解する必要があることを示唆しています。

さて、楽しみが来ました。.NETイベントモデルを使用して作業したため、過去に代理人を消費しましたが、詳細の大部分は私には隠されています(Microsoftに感謝します)。基本的なレベルでは、デリゲートインスタンスはメソッドへのポインタであることを理解しています(非常に単純化されていると思います)。

匿名メソッドは、基本的に、デリゲートのターゲットとして一般的に(排他的ではないにしても)作成されるインラインの名前のないメソッドであることを理解しています。

また、ラムダは構文を単純化するためにさまざまな方法で使用され、単純な匿名メソッドをデリゲートにポイントするために使用できることも理解しています。

私の説明のいずれかがここから大きく外れている場合はご容赦ください。これは、これらのトピックを理解するための基本的なレベルです。

したがって、課題は次のとおりです。

  1. これらの項目についての私の理解がさらに近い場合、少なくとも基本的なレベルで誰かに教えてもらえますか?私は複雑な難解な細目を探しているのではなく、基本的なものだけを探しています(今のところ)。

  2. プロジェクトにLINQを適用して合理的な効果を得る前に、これらの概念をどの程度真に理解する必要がありますか?私はそれを完全に理解し、時間を費やすことをいとわない。作品を制作する前に、これらすべてを完全に理解する時間がないかもしれません。

  3. 誰かが私にこれらの主題を説明し、それらを「現実世界」の例に適用するいくつかの良い記事を指摘して、トピックの基本とそれらの応用について頭を悩ませることができますか?私が現実の世界で意味するのは、抽象的な「ベクトルと形」や「動物と牛」ではなく、「顧客と請求書」の文脈でこれをどのように使用できるかということです。シナリオはデモンストレーションの目的でいくらか考案することができますが、厳密には学術的ではないことを願っています。オンラインや本でたくさんの例を見つけましたが、「平易な英語」の説明はほとんどないようです。

何卒よろしくお願い申し上げます。

4

3 に答える 3

6

C# 3 の詳細なガイドはどこにありますか?

1) これまでのあなたの知識は問題ないようです。ラムダ式は、コンテキストに応じて、匿名メソッドまたは System.Linq.Expressions.Expression に変換されます。データベース技術を使用していないため、式を理解する必要はありません (すべてのラムダは無名メソッドになります)。拡張メソッドのリストはありませんでしたが、これらは非常に重要 (かつ簡単) に理解できます。インターフェイスに拡張メソッドを適用する方法を確認してください。linq のすべての機能は System.Linq.Enumerable (IEnumerable(Of T) に対する拡張メソッドのコレクション) に由来するためです。

2) ラムダについて深く理解する必要はありません。

アロー構文 ( => ) は、私にとって最大のハードルでした。矢印は、署名とラムダ式の本体を分離します。

常に覚えておいてください: Linq メソッドは列挙されるまで実行されません。

lambda でのループ変数の使用に注意してください。これは、追跡が特に難しい遅延実行の副作用です。

3)確かに、linqメソッド呼び出しを示す私の回答のいくつかを以下に示します-xmlを使用したものもあります。

于 2009-01-13T16:06:50.773 に答える
5

1) これらの説明は私にはかなり正確に聞こえます。匿名メソッドとラムダ式は、デリゲートのターゲットを入れる新しい型を作成する必要がある場合があります。これにより、クロージャーとして機能できます。

2/3) デリゲート、匿名メソッド、ラムダ式に満足するまで、少し読んでみたいと思います。C# の詳細では、C# 2.0 と C# 3.0 のそれぞれのデリゲート関連の変更に章を割いていますが、もちろん他の本でも詳しく説明しています。記事もありますので参考になさってください。

例として、デリゲートはさまざまな目的で使用されます。これらはすべて同じ機能を異なる方法で見ていますが、非常に異なって感じることがあります。

  • 新しいスレッドを開始するときに呼び出すコードを提供する
  • UI イベントへの対応
  • LINQ クエリのフィルター、選択、順序付けなどを提供する
  • 非同期操作が終了したときのコールバックを提供する

例を挙げたい特定の状況がある場合は、そのほうが答えやすいでしょう。

編集: 現時点では LINQ to Objects と LINQ to XML のみを使用していることは朗報であることを指摘しておく必要があります。これは、式ツリーをまだ理解する必要がないことを意味します。(それらはクールですが、一度に 1 ステップずつ...) LINQ to XML は、実際には LINQ とうまく連携する単なる XML API です。私の記憶では、LINQ to XML でデリゲートを使用するのは、実際に LINQ to Objects を呼び出しています。(確かに、これは非常に良いことですが、すでに学んだことを再利用できることを意味します。)

すでに C# の詳細を理解しているので、第 10 章と第 11 章では、LINQ でラムダ式 (およびラムダ式に変換されるクエリ式) を使用するかなりの数の例を提供します。第 5 章には、デリゲートの使用例がいくつかあります。

于 2009-01-13T16:09:33.827 に答える
1

これを読む...

http://linqinaction.net/

..そしてあなたの質問はすべて答えられます!!!

于 2009-01-13T16:10:14.247 に答える