.NET 序列比较工具的可视化与过滤

.NET开发中,经常需要对大量的序列进行比较。这些序列可能是庞大的,并且检查比较结果有时会变成一场噩梦。为了解决这个问题,决定开发一个支持在调试模式下可视化和过滤集合结果的程序集。随着时间的推移,将这个程序集更新为Visual Studio的可视化工具,今天将与大家分享,因为认为它是一个非常有用的补充。

MLCollectionVisualizers

MLCollectionVisualizers是一个开源项目,代码可以在GitHub上找到。

安装MLCollectionVisualizers非常简单。需要区分Visual Studio 2015和Visual Studio 2017。

需要将MLCollectionVisualizer2015.dll复制到以下路径:

C:\Program Files (x86)\MicrosoftVisual Studio14.0\Common7\Packages\Debugger\Visualizers\

需要将MLCollectionVisualizer2017.dll复制到以下路径:

C:\Program Files (x86)\MicrosoftVisual Studio\2017\Enterprise\Common7\Packages\Debugger\Visualizers\

一旦程序集被放入Visual StudioVisualizer路径,重启Visual Studio,集合可视化工具就会被安装。

MLCollectionVisualizers的使用非常简单。需要将类类型标记为SERIALIZABLE。如果有人报告任何不适,可以使用预处理器指令,如下例所示:

#if DEBUG [Serializable] #endif public class Album { public int ID { get; set; } public string Artist { get; set; } public string AlbumName { get; set; } public int Released { get; set; } public string Genre { get; set; } public decimal NumberOfCopies { get; set; } public int ClaimedSales { get; set; } }

使用它非常简单。在集合变量上设置一个断点,然后点击放大镜:

正如所看到的,可以通过点击网格的列标题来排序数据。

MLCollectionVisualizer提供了过滤数据的功能,这种过滤仅限于DataColumn.Expression属性。类似于SQL。将转到第二个标签“Filters”:

‘Filter Info’ LinkedLabel - 包含带有过滤信息的链接,所有指令和限制。

应用过滤按钮 - 执行过滤

例如:

在移动中:

如果输入了错误的语法过滤,它会显示错误:

在这个例子中,错误是‘=’符号。

MLCollectionsVisualizers支持的集合如下:

  • IEnumerable<T>
  • ICollection<T>
  • IList<T>
  • HashSet<T>
  • ObservableCollection<T>
  • Queue<T>
  • Stack<T>
  • LinkedList<T>
  • IReadOnlyCollection<T>
  • ConcurrentBag<T>
  • ConcurrentQueue<T>
  • ConcurrentStack<T>
  • Array ( T[] )
  • IEnumerable
  • ArrayList
  • HashSet
  • Queue
  • Stack

不支持x64进程。

不支持System.Data.Entities.DynamicProxies的Entity Framework。Entity Framework在查询数据库时,默认为这些对象使用泛型,具有特殊特性:

可以修复这个问题,设置Entity Framework配置DbContext,将ProxyCreationEnabled设置为false:

context.Configuration.ProxyCreationEnabled = false;

为这个解决方案添加一个测试项目,以及MLCollectionVisualizer2015.dll和MLCollectionVisualizer2017.dll。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485