Невозможно присвоить void локальной переменной с неявным типом - PullRequest
13 голосов
/ 23 ноября 2011
var query = rep.GetIp()  // in this line i have the error
           .Where(x => x.CITY == CITY)
           .GroupBy(y => o.Fam)
           .Select(z => new IpDTO
                        {
                            IId = z.Key.Id,
                            IP = z.Select(x => x.IP).Distinct()
                        })
           .ToList().ForEach(IpObj => IpObj.IP.ToList().ForEach(ip => PAINTIP(ip)));

Когда я запускаю этот код, у меня появляется ошибка:

Невозможно назначить void неявно типизированной локальной переменной

Я нашел в Googleпроблема типа, потому что foreach не является функцией LINQ?Я не могу понять, где находится void

Ответы [ 3 ]

11 голосов
/ 23 ноября 2011
  • ForEach() имеет тип void.

  • Select() возвращает IEnumerable<T>, ToList() возвращает List<T> и т. Д.

так:

List<X> x = ...Select(x => x).ToList(); // List<T>

или

x.ForEach(x => x); // void

, поскольку вы не можете присвоить void List<T>.


var query = rep.GetIp()  // in this line i have the error
           .Where(x => x.CITY == CITY)
           .GroupBy(y => o.Fam)
           .Select(z => new IpDTO
                        {
                            IId = z.Key.Id,
                            IP = z.Select(x => x.IP).Distinct()
                        });

foreach (var dto in query)
{
    foreach (var ip in dto.IP)
    {
        PAINTIP(ip);
    }
}

или

var query = ....
           .SelectMany(z => z.Select(x => x.IP).Distinct());

foreach (var ip in query)
{
    PAINTIP(ip);
}
7 голосов
/ 23 ноября 2011

ForEach() ничего не возвращает.Тип недействителен.

Попробуйте заменить ForEach () на Выбрать () .

1 голос
/ 23 ноября 2011

Я видел ваши другие вопросы, в которых вы задавали аналогичный вопрос для того же запроса. Код частично выглядит так:

var Q = rep.GetIp()
        .Where(x => x.CITY == CITY)
        .GroupBy(y => o.Fam)
        .Select(z => new IpDTO
        {
          IId = z.Key.Id,
          IP = z.Select(x => x.IP).Distinct()
       });

Похоже, вы использовали ответ как таковой и пытаетесь присвоить возвращаемое значение из запроса переменной «Q». Проверьте ваш предыдущий пост: синтаксис в LINQ IEnumerable

Как уже говорили другие, тип возвращаемого значения ForEach - "void". Вы должны вызвать «ForEach», как только переменная «Q» будет инициализирована с коллекцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...