我正在学习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>>
返回测试。