【问题标题】:How to Dump latest list in LinqPad?如何在 LinqPad 中转储最新列表?
【发布时间】:2015-10-14 11:32:27
【问题描述】:

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

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 但它对我不起作用。

【问题讨论】:

  • 您知道在紧密循环中调用new Random().Next() 很可能对所有随机值使用相同的种子(并为您提供相同数字的流)?这就是你有Thread.Sleep(1000)的原因吗?
  • 很高兴知道。在这里,我只是想在其中有一些值,可以是空字符串或此问题的任何内容。

标签: task-parallel-library system.reactive linqpad concurrent-collections


【解决方案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

【讨论】:

    【解决方案2】:

    DumpLatest() 扩展方法只适用于IObservable&lt;T&gt;;无法检测到某个项目已添加到 List&lt;T&gt;,因此 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&lt;T&gt; 获得相同的结果(可以说更优雅):

    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 在 cmets 中提到的那样。如果您使用第一种方法,请将列表本身放入DumpContainer,并在循环中调用Refresh()

    【讨论】:

    • 很好,但这只会输出最后一项,而不是更新后的列表。我可以通过执行以下操作得到我需要的东西:list.Add(item); subject.OnNext(list.ToArray());
    • 如果您采用 Thomas 的第二种解决方案,并将 .DumpLatest() 替换为 .Dump(),它是否给您想要的?
    • @joe-albahari 是的,太棒了!正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    相关资源
    最近更新 更多