类似于LINQPad中Dump的操作

前言

有时候需要临时编写测试代码,会使用LINQPad进行编写代码,虽然该工具很轻量级,还可以安装Nuget包,特别合适写测试demo等(目前我只是简单测试使用),但是有时候还是习惯使用Visual Studio编写代码,感觉提示的效果更好,所以就是还是习惯性去开Visual Studio。

然而

LINQPad里面的Dump扩展方法确实用着很舒服,比如我们这么使用

void Main()
{
    var p = new Person { Name = "张三", Age = 26 };
    // 输出对象
    p.Dump();

    var list = new List<Person>
    {
        new Person{ Name="李四", Age=20 },
        new Person{ Name="王五", Age=10 },
    };
    list.Dump();
}

public class Person
{
    public string Name { set; get; }

    public int Age { set; get; }
}

可以使用Dump方法输出下面很清晰的结果

73f6c96ac78e023b433d6a7d51b8a990.png
img

如果我使用Visual Studio新建一个控制台项目,将该代码拷贝进去

internal class Program
{
    private static void Main(string[] args)
    {
        var p = new Person { Name = "张三", Age = 26 };
        // 输出对象
        p.Dump();

        var list = new List<Person>
        {
            new Person { Name = "李四", Age = 20 },
            new Person { Name = "王五", Age = 10 },
        };
        list.Dump();
    }
}

public class Person
{
    public string Name { set; get; }

    public int Age { set; get; }
}

那么就会提示报错,因为Dump方法是LINQPad才有的内容,如果我直接使用Console输出

private static void Main(string[] args)
{
    var p = new Person { Name = "张三", Age = 26 };
    // 输出对象
    //p.Dump();
    Console.WriteLine(p);

    var list = new List<Person>
    {
        new Person { Name = "李四", Age = 20 },
        new Person { Name = "王五", Age = 10 },
    };
    // list.Dump();
    Console.WriteLine(list);
}

输出结果又不是我们想要的内容

642d636dde24c3ae310a3f330070d8f4.png
img

所以就想,那么自己是不是要写一个扩展方法,来实现Console的输出,效果类似LINQPad的输出,造轮子之前当然要看了一下是否有现成的轮子使用,毕竟我遇到的问题基本上网上的朋友都遇到过了,然后就简单查看找到了下面两个最近还在更新的且符合我需求的nuget包

<PackageReference Include="Dumpify" Version="0.6.0" />
<PackageReference Include="Dumpper" Version="0.0.7" />

简单对比,我选择了下载量更高的Dumpify,下面就简单演示一下

Dumpify操作

官方文档地址:https://github.com/MoaidHathot/Dumpify

在引用Dumpify包的前提下,取消注释上面的Dump扩展方法

using Dumpify;

internal class Program
{
    private static void Main(string[] args)
    {
        var p = new Person { Name = "张三", Age = 26 };
        // 输出对象
        p.Dump();

        var list = new List<Person>
        {
            new Person { Name = "李四", Age = 20 },
            new Person { Name = "王五", Age = 10 },
        };
        list.Dump();
    }
}

public class Person
{
    public string Name { set; get; }

    public int Age { set; get; }
}

展示效果如下

1d1c25be750c2e94ddee2694cf134dad.png
img

是不是很直观方便我们查看内容,那么这个包还有哪些功能那,可以访问它的文档查看,下面列举一些

嵌套和循环引用

using Dumpify;

var p = new Person { Name = "张三", Age = 26 };
p.Children = new List<Person>
{
    new Person
    {
        Name = "李四",
        Age = 20,
        Children = new List<Person>
        {
            new Person { Name = "11", Age = 10 }
        }
    },
    new Person { Name = "王五", Age = 10 },
};
p.Dump();

public class Person
{
    public string Name { set; get; }

    public int Age { set; get; }

    public List<Person> Children { get; set; }
}
26d505e1462b541ac99a31eb807acd40.png
img

支持数组字典和集合

new[] { 1, 2, 3, 4 }.Dump();
new Dictionary<string, string> { { "11", "111" }, { "22", "222" } }.Dump();
3ec7c44eb08d0ff9dbe464fab22978f0.png
img

打开或者关闭字段和私有成员

new AdditionValue(1, 2).Dump(members: new MembersConfig { IncludeFields = true, IncludeNonPublicMembers = true });


public class AdditionValue
{
    private readonly int _a;
    private readonly int _b;

    public AdditionValue(int a, int b)
    {
        _a = a;
        _b = b;
    }

    private int Value => _a + _b;
}
24aa70d170c11c4c770bbf80ab5aa677.png
img

自定义颜色

var package = new { Name = "Dumpify", Description = "Dump any object to Console" };
package.Dump(colors: ColorConfig.NoColors);
package.Dump(colors: new ColorConfig { PropertyValueColor = new DumpColor(Color.RoyalBlue) });
142667d7afdea9f12e8b4519332b6667.png
img

最后

从官方文档中得知下个版本会添加更多的支持,如果有需要可以查看官方文档,目前上面那些已经够我测试使用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
5.40的新功能 现在,编辑器会自动检测外部变化来打开文件,并显示一个重负载的提示。 LINQPad 5现在支持面向.NET框架4.8的NuGet包。 LINQPad现在是稳健与预发行的依赖,以及某些种类的循环引用的NuGet发布包。当腐败的PCL配置文件存在也不再抛出异常。 在“定位到”对话框(控制+逗号)现在包含的快捷方式,以打开和在一个步骤执行查询。 现在有Canvas和SVG的控制,除了在5.36添加HTML控件。 通过在AnyCPU版本的查询生成的窗口弹出窗口现在可以可靠地显示在主机进程的前面。 内置的图表功能现在显示值提示。 重命名符号功能现在用于指定的元组。 现在,编辑器更快的是包含许多符号重复大型文档。 命名空间清理功能,现在考虑到从“我的分机”继承帐户的NuGet引用。 集成ILSpy已经更新到最新版本(4.0.0.4521)。 DataContext的的CommandTimeout属性现在荣幸调用ExecuteQueryDynamic和ExecuteStoredProcedure时。 (付费版)如果您激活Amazon EC2实例许可证,它现在仍然有效,如果底层硬件的变化(就像使用Azure的虚拟机和角色)。 在调试器监视窗口呼吁封闭泛型类型的方法时的错误已经被修正了。 里面DumpContainers可观现在呈现可靠。 转储管道现在明确支持Json.NET对象。 Util.WriteCsv现在承认ExpandoObjects。 现在有在的Util类的OPENQUERY方法来打开并运行在UI的查询。 此版本支持实验罗斯林组件的更新版本,这样你就可以用C#8的功能,如范围,指标和可空引用类型游戏。要启用,去编辑| 首选项>查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值