Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Closure / 15 сообщений из 15, страница 1 из 1
20.01.2015, 18:12
    #38858802
relief
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
Почему такой код кидает ошибку?

Код: c#
1.
2.
3.
4.
5.
IEnumerable<char> query = "Not what you might expect";
string vowels = "aeiou";
for (int i = 0; i < vowels.Length; i++)
 query = query.Where (c => c != vowels[i]);
foreach (char c in query) Console.Write (c);



Ведь когда i = 5 то в query уже ничего не попадает
...
Рейтинг: 0 / 0
20.01.2015, 18:37
    #38858826
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
код довольно бессмысленный.

дело в том, что полученный в query запрос начнет выполняться только на строке
Код: c#
1.
foreach (char c in query) Console.Write (c);

когда i уже будет равно 5 (для всех пяти случаев)
...
Рейтинг: 0 / 0
20.01.2015, 18:38
    #38858828
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
вот так будет работать
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
      IEnumerable<char> query = "Not what you might expect";
      string vowels = "aeiou";
      for (int i = 0; i < vowels.Length; i++)
      {
        int j = i;
        query = query.Where(c => c != vowels[j]);
      }
      foreach (char c in query) Console.Write(c);
...
Рейтинг: 0 / 0
20.01.2015, 18:54
    #38858846
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
Shocker.Pro, судя по названию топика relief это знает... просто не может понять в чем сложность...
...
Рейтинг: 0 / 0
20.01.2015, 19:05
    #38858854
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
buserсудя по названию топика relief это знает.ну так пусть тогда и спрашивает, что конкретно непонятно, я, например, не знаю квалификации ТС, в частности, понимает ли он, что такое деревья выражений, материализация и захват переменной

buserпросто не может понять в чем сложность..ну и ответил бы тогда

в том, что переменная i существует один раз, соответственно, захватывается одна и та же переменная, а j существует пять раз, соответственно захватываются пять разных переменных
...
Рейтинг: 0 / 0
20.01.2015, 21:57
    #38858966
relief
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
Код: c#
1.
2.
3.
4.
5.
 IEnumerable<char> query = "Not what you might expect";
string vowels = "aeiou";
for (int i = 0; i < vowels.Length; i++)
 query = query.Where (c => c != vowels[i]);
foreach (char c in query) Console.Write (c);




buserпросто не может понять в чем сложность..ну и ответил бы тогда

в том, что переменная i существует один раз, соответственно, захватывается одна и та же переменная, а j существует пять раз, соответственно захватываются пять разных переменных[/quot]

мне непонятно вот что. Как так получается, что переменная i из цикла for уже за пределами видимости, когда непосредственно выполняется query в foreach вроде как, но на самом деле она видна?
...
Рейтинг: 0 / 0
20.01.2015, 22:16
    #38858978
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
гугли "захват переменных"

например это
http://habrahabr.ru/post/141270/
...
Рейтинг: 0 / 0
20.01.2015, 22:26
    #38858988
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
relief,
вообще Вас не выкидывает на шестой итерации когда i=5?
количество символов и индекс символа в строке абсолютно разные вещи.
...
Рейтинг: 0 / 0
20.01.2015, 22:30
    #38858994
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
Где-то в степиrelief,
вообще Вас не выкидывает на шестой итерации когда i=5?
количество символов и индекс символа в строке абсолютно разные вещи.не выкидывает, у него условие "меньше", все правильно
...
Рейтинг: 0 / 0
20.01.2015, 22:38
    #38858996
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
Shocker.Pro,
а должно выкинуть, i захвачена, перед проверкой в for она инкременируется ++ ==5
проверку не проходит и уходит такой в ==5 в query за цикл
...
Рейтинг: 0 / 0
20.01.2015, 22:53
    #38859003
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
в моем коде i не захвачена, а в код ТС как раз и вылетает по этой причине, об этом самое первое сообщение
...
Рейтинг: 0 / 0
20.01.2015, 23:02
    #38859012
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
мой решарпер бы орал и хрюкал на i? как каспер по вирусом, а что голая студия не заботится о психическом стоянии пользователей
в данном случае?
...
Рейтинг: 0 / 0
21.01.2015, 05:34
    #38859126
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
Где-то в степимой решарпер бы орал и хрюкал на i? как каспер по вирусом, а что голая студия не заботится о психическом стоянии пользователей
в данном случае? А в данном случае, нахуа мне пустые вопли Решарпера?
Код: c#
1.
2.
3.
4.
for (int i = 0; i < 10; i++)
{
    var r = someArray.Where(v => v != i).ToArray();
}
...
Рейтинг: 0 / 0
21.01.2015, 07:59
    #38859163
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
Алексей КГде-то в степимой решарпер бы орал и хрюкал на i? как каспер по вирусом, а что голая студия не заботится о психическом стоянии пользователей
в данном случае? А в данном случае, нахуа мне пустые вопли Решарпера?
Код: c#
1.
2.
3.
4.
for (int i = 0; i < 10; i++)
{
    var r = someArray.Where(v => v != i).ToArray();
}



Заведомо неправильно сделано, вот зачем. Кроме того, стоит заменить ToArray на ToListAsync и тут же этот код оборачивается жопой. Не надо допускать даже возможности сделать ошибку на ровном месте. Так что вопли решарпера тут к месту по многим причинам.
...
Рейтинг: 0 / 0
21.01.2015, 11:43
    #38859450
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Closure
Алексей К,
авторв данном случае?
Алексей, в данном случае ночной кошмар ( код), опубликованный выше ( в самом начале), домыслы и инсинуации имхо не уместны..
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Closure / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]