28

私は C# でラムダ式を使用する前に、他の言語でラムダ式を使用していたので、特に本体が戻り値 (述語など) を表す単なる式である単純なラムダ_の形式で単純なラムダを使用する習慣を身につけました。 Func<T, TResult>,..)。ただし、C# では、_同じ種類のラムダ式 ( x,y,z,i,j,k. 文字のアプローチは奇妙に思えます。なぜなら、これらの文字は、ループ変数に対して、一般的な使用法ですでに別の典型的な意味を持っているからです。_私の意見では、多くの場合読みやすいです。一文字スタイルは本当に C# のラムダの確立されたスタイルですか?

例:

私が書き慣れているもの:

var ages = people.Select(_ => _.Age);

代わりに書かれているのは次のとおりです。

var ages = people.Select(x => x.Age); // choice of 'x' is not consistent
4

7 に答える 7

53

多くの C# 開発者は_、パラメーターが使用されないことを示すために使用し、パラメーターが使用されている場合は文字またはその他の短い名前を使用します。

その他のリソース:

于 2012-05-10T17:04:41.157 に答える
25

これは可変の名前なので、名前は伝達する必要のある情報を伝達する必要があるという考えに賛成です。どのような情報が_伝わりますか?

その同じ目的のために、どのような情報がx伝えられますか?

私はあなたの例を次のように書くかもしれません:

var ages = people.Select(p => p.Age);

pアイデアは、少なくともステートメント全体の文脈でそれが記録であることを示唆していると私は感じているということです。peopleあなたはそれをさらに進めることができます:

var ages = people.Select(person => person.Age);

これで、その変数が実際に何であるかが読者に伝わります。もちろん、そのような小さな声明については、それはやり過ぎだという議論をすることができます。私はそうは思いませんが、それは好みの問題です。(そして、あなたの好みだけでなく、このコードをサポートしなければならない人の好みも。)

非常に大きく、複数行の複雑なラムダ式の場合、名前はさらに重要になります。変数が意味するコンテキストから離れるほど、変数の名前にそのコンテキストを含める必要があります。

于 2012-05-10T17:08:28.160 に答える
17

ラムダ関数が他のメソッドとどう違うのか. 誰かが次のような方法でコードを投稿した場合:

public static int getAge(Person _)
{
  return _.Age;
}

また

public static int getAge(Person x)
{
  return x.Age;
}

あなたは何と言うでしょう?

私の意見では、ラムダのパラメーターの名前を選択することは、他のメソッドのパラメーターと同じくらい意味があるはずです。その場合、変数は何も意味する必要がなく、実際には何でもかまいx => xませんが、頭の中ですべてにアンダースコアまたは単一の文字を使用すると、コードが読みにくくなります。 . (非常に多くの人が LINQ/Lambdas の利点を読みやすさとして宣伝していますが、すべての変数を難読化すると、読みやすさが損なわれます。)

于 2012-05-10T17:20:21.993 に答える
5

または、意味のある名前を使用することもできます。

var ages = people.Select(person => person.Age);
于 2012-05-10T17:06:29.077 に答える
1

C# では、_クラス (属性) 変数に_使用され、ローカル変数には使用されません。したがって、ローカル変数とクラス変数には意味のある名前を使用するとよいでしょう。

元:

var personList = (from person in people  where person.Age > 18  select person).ToList();
于 2012-05-11T07:35:14.957 に答える
0

名前を付けることができるのには理由があります。複数の入力があり、それらを区別する必要がある場合があるためです。

Func<int,int,int> product = (num1, num2) => (num1 * num2);  // takes in two ints, and returns one int
int x = product(2, 3);  
于 2012-05-10T17:12:47.830 に答える
0

ラムダ変数に名前を付けるための「確立された」スタイルはありません。ただし、アンダースコアは通常、ある種のインスタンス メンバー変数を意味します。これは、通常の変数名と比較して、スタイルが他の命名基準と競合する可能性があることを意味します。

長い話 短い- あなたのために働くことをしてください。

于 2012-05-10T17:05:10.223 に答える