Подтвердить что ты не робот

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

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 неявной типизированной локальной переменной

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

4b9b3361

Ответ 1

  • 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);
}

Ответ 2

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

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

Ответ 3

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

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 <string>

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