如何在 LinqPad 中转储最新列表?
How to Dump latest list in LinqPad?
所以下面的代码将每秒转储整个列表。
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 here 但它对我不起作用。
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()
。
与的回答基本相同,略短。
Observable.Interval(TimeSpan.FromSeconds(1))
.Select(t=> new { A = t.ToString(), B = new Random().Next() })
.Take(100)
.Dump(); // all 100
//.DumpLatest(); //only latest one
所以下面的代码将每秒转储整个列表。
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 here 但它对我不起作用。
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()
。
与
Observable.Interval(TimeSpan.FromSeconds(1))
.Select(t=> new { A = t.ToString(), B = new Random().Next() })
.Take(100)
.Dump(); // all 100
//.DumpLatest(); //only latest one