因此,以下代码将每秒转储整个列表。
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);
}
但是如何在不添加新输出的情况下更新转储输出呢?
有一个相关的问答here,但它对我不起作用。
答案 0 :(得分:6)
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);
}
编辑:好的,我以为你只想看到最后一项。要打印整个列表,只需使用Joe在评论中提到的subject.Dump()
。如果您使用第一种方法,请将列表本身放在DumpContainer
中,然后在循环中调用Refresh()
。
答案 1 :(得分:1)
基本上与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