7

※重複質問ですが、コードで「=>」という表現を見たことがありません。これが特にラムダ式であることを知っていたら、自分でググって見つけたでしょう。ありがとう!

私は Linq を初めて使用するので、次のコードで "=>" を使用すると、非常に混乱しました。

using System;
using System.Linq;
using System.Collections.Generic;

public static class Extend
{
    public static double StandardDeviation(this IEnumerable<double> values)
    {
        double avg = values.Average();
        return Math.Sqrt(values.Average(v=>Math.Pow(v-avg,2)));
    }
}

出典:ジェネリックリストの標準偏差?

いくつかの質問: ここで => は何をしますか? Intellisense は 'v' が int であることを教えてくれますが、宣言されたことはありません。これはどのように作動しますか?

4

6 に答える 6

8

この表記=>はラムダ式を意味します

例:

Enumerable.Range(0,100).Where(x=>x==1);

これは、パラメーターとして受け入れて を返すx=> x==1匿名デリゲートです。それは:intbool

delegate bool SomeDelegate(int x);

デリゲートの本体を次のように割り当てることができます。

bool Function(int x)
{ 
   return x==1;
}

ラムダ式は、デリゲートまたは式ツリー型を作成するために使用できる無名関数です。ラムダ式を使用すると、引数として渡すことができる、または関数呼び出しの値として返すことができるローカル関数を作成できます。ラムダ式は、LINQ クエリ式を記述するのに特に役立ちます。

ラムダ式を作成するには、入力パラメーター (存在する場合) をラムダ演算子 => の左側に指定し、式またはステートメント ブロックを反対側に置きます。たとえば、ラムダ式 x => x * x は、x という名前のパラメーターを指定し、x の 2 乗の値を返します。次の例に示すように、この式をデリゲート型に割り当てることができます。

ソース: ラムダ式について読む

ラムダを使用する理由についての SO の質問は次のとおりです。C# ラムダ式: なぜ使用する必要があるのですか?

于 2013-10-04T08:44:20.527 に答える
6

演算子=>は linq とは何の関係もありません。これはラムダ式です。匿名関数を作成するために使用されるため、小さなことごとに完全な関数を作成する必要はありません。

したがって、式:

s => s + 5 

次のように翻訳できます。

int fun(int s)
{
return s + 5;
}
于 2013-10-04T08:46:46.070 に答える
1

この非常に短い記事も読むことができます。これは、ラムダ式とは何か、それをどのように使用するか、いつ使用するかについての非常に優れた要約です。

与えられた例は

List<int> numbers = new List<int>{11,37,52};
List<int> oddNumbers = numbers.where(n => n % 2 == 1).ToList();
//Now oddNumbers is equal to 11 and 37

2 行目で、oddNumbersは 1 に等しい数字にnumber % 2等しくなるので、数字が奇数の場合

于 2013-10-04T08:49:21.783 に答える
1

=>ラムバ式の表記法です。これは、基本的に匿名メソッドを簡単に書く方法です:)

また、可能な場合は自動的に型を推測するため、v が int として宣言されることはありませんが、コンパイラによって int であると理解されます。

于 2013-10-04T08:44:50.090 に答える
0

これはラムダ式です。

この記事をご覧ください: http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx

リストの要素として "v" を取り (そのため、タイプはリストに依存します)、"=>" はこの要素に対して実行するアクションを示します (Math.Pow() がアクションです)。

于 2013-10-04T08:46:24.697 に答える