如何在 LINQPad 中添加(而不是替换)DumpContainer 的内容

How to add (not replace) the content of a DumpContainer in LINQPad

我有一个 DumpContainer,我想向其中动态添加内容。我知道我可以将 Content 属性 设置为一个新对象,但这会删除以前的内容。

如何添加而不是替换?

感谢您的帮助。

如果您将通用对象放在 DumpContainer 中,这些对象与字段值等一起显示,您可以使用 Util.ToHtmlString 和然后连接。

var dc = new DumpContainer();
dc.Dump();

dc.Content = Util.RawHtml(Util.ToHtmlString(true, aVariable));

// some time later...

dc.Content = Util.RawHtml(Util.ToHtmlString(dc.Content)+Util.ToHtmlString(true, anotherVar));

不要向 DumpContainer 添加内容,而是继续更新它,但要使其内容包含您要添加的所有数据。

var c = new DumpContainer();
var list = new List<string> {"message 1"};
c.Content = list;
c.Dump();
list.Add("message 2");
c.UpdateContent(list);

或者,您可以转储 IObservable<>,它会在对象发出时自动更新。 (导入 System.Reactive NuGet 包以使其工作。)

var s = new Subject<string>();
s.Dump();
s.OnNext("message 1");
s.OnNext("message 2");

还有几个选项:

如果您希望项目垂直显示,而不是在 table 中,请在 DumpContainer 中使用 Util.VerticalRun:

var content = new List<object>();
var dc = new DumpContainer (Util.VerticalRun (content)).Dump();

content.Add ("some text");
dc.Refresh();

content.Add (new Uri ("http://www.linqpad.net"));
dc.Refresh();

如果项是异步生成的,请使用异步流 (C# 8):

async Task Main()
{
    // LINQPad dumps IAsyncEnumerables in the same way as IObservables:
    RangeAsync (0, 10).Dump();
}

public static async IAsyncEnumerable<int> RangeAsync (int start, int count)
{
    for (int i = start; i < start + count; i++)
    {
        await Task.Delay (100);
        yield return i;
    }
}