前言
有时候需要临时编写测试代码,会使用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方法输出下面很清晰的结果
![null 73f6c96ac78e023b433d6a7d51b8a990.png](https://i-blog.csdnimg.cn/blog_migrate/f9af065744ffae8900c86a08803d3258.png)
如果我使用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);
}
输出结果又不是我们想要的内容
![null 642d636dde24c3ae310a3f330070d8f4.png](https://i-blog.csdnimg.cn/blog_migrate/305a03b43a79dfc8fa0ce633380d766f.png)
所以就想,那么自己是不是要写一个扩展方法,来实现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; }
}
展示效果如下
![null 1d1c25be750c2e94ddee2694cf134dad.png](https://i-blog.csdnimg.cn/blog_migrate/118d96ceac7b907e50a96269f945a2f3.png)
是不是很直观方便我们查看内容,那么这个包还有哪些功能那,可以访问它的文档查看,下面列举一些
嵌套和循环引用
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; }
}
![null 26d505e1462b541ac99a31eb807acd40.png](https://i-blog.csdnimg.cn/blog_migrate/8fb81f3e218833f46c3dd81cadfa54f2.png)
支持数组字典和集合
new[] { 1, 2, 3, 4 }.Dump();
new Dictionary<string, string> { { "11", "111" }, { "22", "222" } }.Dump();
![null 3ec7c44eb08d0ff9dbe464fab22978f0.png](https://i-blog.csdnimg.cn/blog_migrate/5269d7f1eb40d7ed75c0fe7e4a415b7a.png)
打开或者关闭字段和私有成员
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;
}
![null 24aa70d170c11c4c770bbf80ab5aa677.png](https://i-blog.csdnimg.cn/blog_migrate/62ca5bb06711efb8400a09b878009655.png)
自定义颜色
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) });
![null 142667d7afdea9f12e8b4519332b6667.png](https://i-blog.csdnimg.cn/blog_migrate/97f83a607c82ebd6961cb7316114b299.png)
最后
从官方文档中得知下个版本会添加更多的支持,如果有需要可以查看官方文档,目前上面那些已经够我测试使用了。