2009-06-25 6 views
1

私はC#の経験豊富な開発者であり、過去7年間のLOBアプリケーションで作業していますが、プログラミングにおけるラムダ式の使い方を理解する上で問題があります。実際のプログラミングにおけるラムダ式の使用

私の知る限り理解し、それはLINQ(グループ化、選択、等。)を使用した作業

  1. の場合に有用である
  2. 私たちは、引数として任意の関数へのラムダ式を渡すことができますので、代理人または匿名の関数または通常の関数の代わりに使用することができます。
  3. 任意のデータ型変数を引数とし、任意のデータ型を返すことができる汎用ラムダ関数を作成できます。

    MyFirstLambdaFunc((val1,val2) => val1+val2) 
    public R MyFirstLambdaFunc(Func lambdaexpression,T x,T y) 
    { 
        R Result = lambdaexpression(x, y); 
        return Result; 
    } 
    
  4. コーディングがコンパクト

ことができる今の質問は次のとおりです。

  1. 他の利点がありますか?
  2. ラムダ式を関数として渡すと、1行の操作しか渡せませんか?
  3. 誰かがいくつかのケーススタディや実用的なサンプル文書を持っていますか?

非式ツリーを事前

ハリッシュBhattbhatt

答えて

2

のおかげで、あなたは確かに複数行のラムダ式を書くことができます。

var query = foo.Select(x => { 
       string text = x.Value; 
       int delimitedIndex = text.IndexOf(' '); 
       return int.Parse(text.Substring(0, delimitedIndex); 
      }); 

ラムダ式は、ほとんどどこでもあなたが合理簡単な実装でデリゲートのインスタンスを作成することに役立ちます:ちょうど今朝、私はの線に沿って何かを書きました。

別のケースを説明するために、いくつかのスレッドを開始して、多くの値のそれぞれに対して作業を行いたいとします。 ParameterizedThreadStartがあります - 通常はトリッキーで、強く型付けされた方法であること行う

foreach (string url in urls) 
{ 
    // Slight quirk due to variable capture semantics 
    string urlCopy = url; 
    new Thread(() => FetchUrl(urlCopy)).Start(); 
} 

: - (。我々は、スレッドの多くを作成しているという事実を無視してみましょう同じ技術があまりにもスレッドプールのために働く)あなたはのようなものを使用することができますしかし、それは一般的ではないので、やりがいのあるものになります。これはかなりきれいなIMOです。

+1

:これはちょうどこのように、私の意見では、それにメソッドを渡すよりもはるかに良く働く

Parallel.For(1, 10, i => { // do work }); 

私はラムダ式は非常に良い "閉鎖"ツールであると言います。あなたは同意しない?時には私は単純な関数を書くことに敬意を表しますが、魔女はtの祖先から "多くの状態"を知る必要があるので、多くのパラメータを必要とします。ラムダ式はこれらの状況に役立ちます... –

0

おかげでジョン、

あなたのマルチライン機能は非常によく、X => { ストリングテキスト= x.Value

受信されます。 int delimitedIndex = text.IndexOf( ''); リターンint.Parse(text.Substring(0、delimitedIndex);}

可能であればあなたはラムダ式は、他のプログラミング技術の代わりに、大きな助けになることができますいくつかのより多くの例や状況を提供することができます...可能であれば

私はこれが技術的に事実を知ることは十分ではないが、実際にそれをどこで使うべきか、そして特定の状況においてどのように役立つかが非常に重要であるため、

+0

ここに掲載されたものは答えです。フォローアップの質問をするには、コメント(回答ではなく)を残すか、質問を編集するか、まったく新しい質問を作成します。ラムダの例としては、このサイトを検索してみてください。何千もの例があります。 –

+0

確かに...私はサイトの初心者だったので、私はその時点で気づいていませんでした...私の側から申し訳ありません – Harryboy

0

私はラムダイベントハンドラとしてかなり、例えば使用しました:

button.Click += (sender, e) => DoSomething(); 

、私はそれが非常にきれいな構文を作成し、時折閉鎖セマンティクスがイベントを処理するのに有用であることを感じています。

0

.NET 4の新しいタスク並列ライブラリは、それを広範囲に使用します。あなたが並行してコードのブロックを実行したい場合たとえば、あなたが書くことができます。

Parallel.For(1, 10, SomeMethodWithIntAsParam);