简单的 LINQ 重构/样式
simple LINQ refactoring / style
由于 LINQ Select()
需要一个 FUNC<int,T>
作为参数,我必须定义一个未使用的变量。
我认为查询语法在这种情况下更清楚。
我如何摆脱任何混乱,使阅读起来简单明了?
var rand = new Random();
//Method syntax
IEnumerable<char> c = Enumerable.Range(0, 10)
.Select( (p) => (char)('A' + rand.Next(0,26)));
//Query syntax
var c = from counter in Enumerable.Range(0,10)
select (char)('A' + rand.Next(0,26));
它看起来已经很干净并且易于阅读了。
我认为您不会再深入,也不值得——即使您定义了自己的 Select<T, TR>(this T t, Func<TR> f)
,您仍然必须将其称为 t.Select(() => ...)
(注意空括号)。
不过您可以将未使用的变量显式标记为 _
:
var c = Enumerable.Range(0, 10).Select(_ => (char)('A' + rand.Next(0, 26)));
或者,您可以使用添加的抽象并隐藏投影,例如,在本地方法中:)
char RandomChar(int _) => (char)('A' + rnd.Next(0, 26));
var c = Enumerable.Range(0, 10).Select(RandomChar);
由于 LINQ Select()
需要一个 FUNC<int,T>
作为参数,我必须定义一个未使用的变量。
我认为查询语法在这种情况下更清楚。
我如何摆脱任何混乱,使阅读起来简单明了?
var rand = new Random();
//Method syntax
IEnumerable<char> c = Enumerable.Range(0, 10)
.Select( (p) => (char)('A' + rand.Next(0,26)));
//Query syntax
var c = from counter in Enumerable.Range(0,10)
select (char)('A' + rand.Next(0,26));
它看起来已经很干净并且易于阅读了。
我认为您不会再深入,也不值得——即使您定义了自己的 Select<T, TR>(this T t, Func<TR> f)
,您仍然必须将其称为 t.Select(() => ...)
(注意空括号)。
不过您可以将未使用的变量显式标记为 _
:
var c = Enumerable.Range(0, 10).Select(_ => (char)('A' + rand.Next(0, 26)));
或者,您可以使用添加的抽象并隐藏投影,例如,在本地方法中:)
char RandomChar(int _) => (char)('A' + rnd.Next(0, 26));
var c = Enumerable.Range(0, 10).Select(RandomChar);