Здравствуйте, _NN_, Вы писали:
_NN>Есть ли синтаксическая возможность не генерировать код переменной 'counter' в "F" и при этом оставаться в синтаксисе LINQ-а ?
from counter in Enumerable.Range(1,10).Take(5)
select getValue(i) into result
where result.HasValue
select result.Value;
Есть ли синтаксическая возможность не генерировать код переменной 'counter' в "F" и при этом оставаться в синтаксисе LINQ-а ?
static int? getValue(int i){return i;}
// Изначальный вариант
static void F(int i)
{
var q =
from counter in Enumerable.Range(1,10).Take(5)
let result = getValue(i)
where result.HasValue
select result.Value;
}
// F через методы расширения
static void F2(int i)
{
var q =
Enumerable.Range(1, 10)
.Take(5)
.Select(counter => new { counter, result = getValue(i) })
.Where(t => t.result.HasValue)
.Select(t => t.result.Value);
}
// Тут нет лишней переменной
static void F3(int i)
{
var q =
Enumerable.Range(1, 10)
.Take(5)
.Select(_ => getValue(i))
.Where(t => t.HasValue)
.Select(t => t.Value);
}
Здравствуйте, _NN_, Вы писали:
_NN>Есть ли синтаксическая возможность не генерировать код переменной 'counter' в "F" и при этом оставаться в синтаксисе LINQ-а ?
Сейчас полно оптимизаторов что заменят linq на рукописные реализации на этапе сборки.
Например:
https://github.com/antiufo/roslyn-linq-rewrite
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.