Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
SelectMany - т.е.
IEnumerable<List<string>> someList = ...;
IEnumerable<string> all = someList.SelectMany(x => x);
Для каждого объекта в someList, это тогда использует лямбду "x => x" для получения IEnumerable< T> для внутренних объектов. В этом случае каждый "x" является List< T> который уже является IEnumerable< T>.
Они тогда возвращаются как непрерывный блок. По существу SelectMany, чему-то нравится (упрощенный):
static IEnumerable<TResult> SelectMany<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TResult>> selector) {
foreach(TSource item in source) {
foreach(TResult result in selector(item)) {
yield return result;
}
}
}
, Хотя это упрощено несколько.
Не точно вызов отдельного метода, но необходимо быть в состоянии записать
var concatenated = from list in lists from item in list select item;
, Где 'списки' - Ваш IEnumerable<List<string>>
, и связанный имеет тип IEnumerable<string>
.
(Технически, это вызов отдельного метода к SelectMany
- просто не похоже, что это было все, что я подразумевал под вступительной речью. Просто требуемый для разрешения этого в случае, если любой запутался или прокомментировал - я понял после того, как я отправил, как это, возможно, читало).
Сделайте простой метод. Никакая потребность в LINQ:
IEnumerable<string> GetStrings(IEnumerable<List<string>> lists)
{
foreach (List<string> list in lists)
foreach (string item in list)
{
yield return item;
}
}
Используя выражение LINQ...
IEnumerable<string> myList = from a in (from b in myBigList
select b)
select a;
... работает просто великолепно.:-)
b
будет IEnumerable<string>
, и a
будет string
.
Вот другое понимание запроса LINQ.
IEnumerable<string> myStrings =
from a in mySource
from b in a
select b;