IObableable作为列表的实现

时间:2018-10-08 20:59:15

标签: c#

我正在学习C#(并且我仍然只知道一点点),我需要在练习中实现一个将IObservable返回给Test的功能,而我不能在此类中导入System.reactive,所以我认为我需要实现该接口。

测试将像list.ToEnumerable().ToArray();一样使用此变量,并且此变量列表会收到标记为public IObservable<T> getList()的函数的返回

我应该如何实现此Observable返回?谢谢!

[编辑]

主要的疑问是,我应该在IObservable的实现中放入什么内容,即测试将在此方法从getList()返回时调用的列表中获取一个列表。ToEnumerable()?

[编辑2]

那是我对IObservable的实际实现

public class MyObservable<T> : IObservable<T>, IDisposable
{
    private List<IObserver<T>> observers;
    private List<T> subject;

    public MyObservable()
    {
        observers = new List<IObserver<T>>();
        subject = new List<T>();
    }

    public void addPath(T path)
    {
        subject.Add(path);
        foreach (var observer in observers)
        {
            if (path != null)
                observer.OnNext(path);
            else
                observer.OnError(new Exception("Houve um erro com a solução"));
        }
    }

    public IDisposable Subscribe(IObserver<T> observer)
    {
        Debug.WriteLine(observer);
        return this.GetEnumerator();
    }

    public void Dispose()
    {
        //
    }
}

我必须实现此接口:

public interface IGraph<T>
{
    IObservable<IEnumerable<T>> getList(T source, T target);
}

IEnumerable<T>已实现并正在制作路径,但是我们返回路径列表,该列表在IObservable中,单元测试以这种方式使用它:

var paths = graph.getList(source, target);
var list = paths.ToEnumerable().ToArray(); //Here in Debug the execution doesn't move

通过调试,我看到即使没有创建任何观察者,当执行达到paths.ToEnumerable().ToArray();时,也会调用IObservable实现中的Subscribe方法

我不确定我是否返回正确,为什么在getList()之后对Subscribe的调用将IObservable<IEnumerable<T>>返回测试。

0 个答案:

没有答案