如何在领屏中转储最新列表



所以下面的代码将每秒转储一次整个列表。

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

最新更新