Re[37]: Есть ли подобие LINQ на других языках/платформах?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.04.21 14:28
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, Serginio1, Вы писали:


I>>>Ты пока не показал, как xml, db и подобные вещи читать твоим IEnumerable, что бы это было максимально эффективно.

S>> Ты чего издеваешься!!! Я тебе ссылку на Linq to XML давал!!!!!

I>Ты пишешь "Xml там IQueryable на самом то деле. ". Смотри сам http://rsdn.org/forum/flame.comp/7994997.1
Автор: Serginio1
Дата: 21.04.21

I>Я не ходил по ссылке, поверил тебе на слово.
I>Похоже, судя по твоим воплям, ты снова написал не то, что думал?
Я тебе исходники давал https://github.com/Microsoft/referencesource/blob/master/System.Xml.Linq/System/Xml/Linq/XLinq.cs#L1457
Но ты не читатель!!!!!

I>>>В JS, раз уж ты вспомнил, есть yield. Однако же, в RX процессинг ленивый, а обходятся без yield

I>>>https://github.com/ReactiveX/rxjs/search?q=yield
I>>>Ажно 11 раз, и те в документации и тестах
I>>>Теперь тебе понятно, что yield для RX это вещь сильно опциональная?

S>> Еще раз писать ленивые итераторы это ручная работа того, что делает yield.


I>Очевидно — нет. Ты просто не в курсе, как это делается в RX.

I>Еще раз:
I>Вместо yield a пишем observer.next(a)
Приведи реальный код. Заметь я тебе даю кучу ссылок но ты их и не читаешь и дальше плетешь всякую хрень.
https://docs.microsoft.com/en-us/archive/msdn-magazine/2017/june/essential-net-custom-iterators-with-yield
То есть такой код.

public System.Collections.Generic.IEnumerable<T>
  GetNotNullEnumerator()
{
  if((First == null) || (Second == null))
  {
    yield break;
  }
  yield return Second;
  yield return First;
}


преобразуется в
public class Pair<T> : IPair<T>, IEnumerable<T>
{
  // ...
  // The iterator is expanded into the following
  // code by the compiler.
  public virtual IEnumerator<T> GetEnumerator()
  {
    __ListEnumerator result = new __ListEnumerator(0);
    result._Pair = this;
    return result;
  }
  public virtual System.Collections.IEnumerator
    System.Collections.IEnumerable.GetEnumerator()
  {
    return new GetEnumerator();
  }
  private sealed class __ListEnumerator<T> : IEnumerator<T>
  {
    public __ListEnumerator(int itemCount)
    {
      _ItemCount = itemCount;
    }
    Pair<T> _Pair;
    T _Current;
    int _ItemCount;
    public object Current
    {
      get
      {
        return _Current;
      }
    }
    public bool MoveNext()
    {
      switch (_ItemCount)
      {
        case 0:
          _Current = _Pair.First;
          _ItemCount++;
          return true;
        case 1:
          _Current = _Pair.Second;
          _ItemCount++;
          return true;
        default:
          return false;
      }
    }
  }
}


Покажи во что это преобразуется в observer.next(a)


I>На сколько я понимаю, C# эквивалент это что то навроде AsyncObservableBase

I>https://github.com/dotnet/reactive/blob/9f2a8090cea4bf931d4ac3ad071f4df147f4df50/AsyncRx.NET/System.Reactive.Async.Core/System/Reactive/AsyncObservableBase.cs

RX это обработка асинхронных очередей достаточно просто решается через IAsyncEnumerable

https://github.com/dotnet/reactive/blob/9f2a8090cea4bf931d4ac3ad071f4df147f4df50/Ix.NET/Source/System.Linq.Async/System/Linq/Operators/TakeWhile.cs
https://habr.com/ru/company/otus/blog/514594/

Заметь как элеганто решается с помощью yield



I>Это не важно, что от чего наследуется. При помощи IQueryable можно сделать всё, добавляя провайдер.

I>С IEnumerable так не получится.

То есть минус ты мне поставил за то, что IEnumerable так не может при работе с БД, поэтому yield отстой и он не нужен и без него Linq и без него линк прекрасно обходится!
За что минус!!!!
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.