Объявление string s = "hello";
объявляется вне лямбда-выражения и, следовательно, доступно из него.В результате объявление s => s.StartsWith("a")
вступает в противоречие с объявлением s
вне лямбда-выражения, то есть компилятор не может выяснить, на какой s
вы ссылаетесь в выражении s.StartsWith("a")
.
.покажите проблему, рассмотрите следующий код:
static void Main(string[] args)
{
string s = "hello"; // Line 1
var test = new[] { "abd", "def" }.Select(x => x.StartsWith("a") && s.StartsWith("h")); // Line 2
}
Это вернет true
в выборе, только если эта строка в массиве (представленная x
в лямбда-выражении) начинается с "a" иСтрока s
начинается с "h".
Кстати, ваш оператор будет возвращать только ICollection<bool>
, а не ICollection<string>
, как вы могли бы ожидать ... для возврата строк, начинающихся с "a", используйте:
new[] { "abd", "def" }.Where(x => x.StartsWith("a"));