编辑:好的,我以为你只想看最后一个项目。要打印整个列表,只需使用
所以下面的代码将每秒转储一次整个列表。
var list = new List<object>();
for (int i = 0; i < 100; i++)
{
list.Add(new { A = i.ToString(), B = new Random().Next() });
list.Dump(); // How to DumpLatest()?
Thread.Sleep(1000);
}
但是我怎样才能使它只更新转储输出而不添加新输出呢?
这里有一个相关的Q/a,但它不适合我。
DumpLatest()
的扩展方法只适用于IObservable<T>
;没有办法检测一个项目被添加到List<T>
,所以LinqPad不能显示最后添加的值。
相反,您可以使用DumpContainer
并显式地更改其内容:
var list = new List<object>();
var container = new DumpContainer();
container.Dump();
for (int i = 0; i < 100; i++)
{
var item = new { A = i.ToString(), B = new Random().Next() };
list.Add(item);
container.Content = item;
Thread.Sleep(1000);
}
您也可以使用Subject<T>
(可以说更优雅)实现相同的结果:
var subject = new Subject<object>();
subject.DumpLatest();
for (int i = 0; i < 100; i++)
{
var item = new { A = i.ToString(), B = new Random().Next() };
subject.OnNext(item);
Thread.Sleep(1000);
}
编辑:好的,我以为你只想看最后一个项目。要打印整个列表,只需使用
subject.Dump()
,就像Joe在评论中提到的那样。如果使用第一种方法,将列表本身放在DumpContainer
中,并在循环中调用Refresh()
。
与Thomas Levesque的回答基本相同,只是短了一点。
Observable.Interval(TimeSpan.FromSeconds(1))
.Select(t=> new { A = t.ToString(), B = new Random().Next() })
.Take(100)
.Dump(); // all 100
//.DumpLatest(); //only latest one