天天看点

.NET平台开源项目速览(2)Compare .NET Objects对象比较组件1.Compare .NET Objects介绍2. Compare .NET Objects注意事项3.一个简单的使用案例4.三大核心对象介绍5.资源

    .net平台开源项目速览今天介绍一款小巧强大的对象比较组件。可以更详细的获取2个对象的差别,并记录具体差别,比较过程和要求可以灵活配置。

    compare .net objects组件是.net平台用于深入比较2个.net对象的开源组件,一直在更新,主要功能如名字所示就是深入比较2个.net对象,是否相等或者是否有差异。可能很多.net对象实现了一些.net自带的接口可以直接进行比较,但是这个组件比较的范围和功能更加广泛。例如:

    可以比较默认的子节点;可以比较结构体;

    可以比较ilist对象;可以比较单维或者多维的数组对象;

    可以比较枚举类型;可以比较idictionary对象;

    可以比较数据集,数据表,字典等等;

    可以比较私有字段或者属性等等。。。。。。。。

    compare .net objects支持.net 3.5及更高版本,同时也支持 silverlight 5+, windows phone 8+, windows rt 8+, xamarin ios, and xamarin android等环境。

    还有很多,不一一列举,可以去官网详细了解。我们重点放在它的基本使用上面,本文就用几个例子带你走近它的世界。虽然简单,但更多复杂的功能可能会用于不同的业务场景,也许是你要的哦。。。该组件唯一的缺点是案例和文档不全面,所以我研究了一下用法,把常规的一些用法代码敲出来,给大家分享一下吧。

    在更好的使用compare .net objects之前,需要搞清楚以下几个注意事项,可以让你走不少弯路,这几个要点也是翻译的官方网站的内容:

1.考虑到性能因素,compare .net objects默认仅仅是检测第一个差异(就可以确认不是同一个对象),如果要比较多个不同点,需要手动设置config.maxdifferences到你需要的不同点数量的最大值;

2.在比较完成之后,对象差异不同点在differences 列表 或者从differencesstring 属性中获取;

3.默认情况下,是进行深度比较,如果只需呀执行浅比较,需要手动设置comparechildren =false;

4.默认情况下,私有属性和私有字段是不比较的,如果需要进行比较,在比较之前要设置config.compareprivateproperties 和config.compareprivatefields 为true;

5.默认情况下,如果比较的2个对象的类型不同,是会抛出异常的,如果需要忽略这个因素,需要设置config.ignoreobjecttypes=true;

    可见该组件的功能不仅完善,而且相对灵活,把你想要的和不想要的都灵活进行了考虑,通过设置不同的开关进行比较。

    为了使得下面的源码介绍更清晰,先看一个简单使用的demo,理解完demo后,我们再反过来深入的介绍比较过程中的三大核心对象。理解了这三大核心对象,整个组件的逻辑和使用也基本清楚了。

    为了简单的比较,我们定义1个person类型,包括名称,年龄和创建日期3个属性。如下面代码:

    首先要引用compare-net-objects的dll,添加之后,要在demo中添加命名空间的引用:

    接下来就看核心的使用过程,看代码注释:

    如上面案例所示,整个过程有3个核心的相关对象和要点:

comparelogic对象的初始化;

comparelogic的配置设置的使用;实际上是comparisonconfig类的设置

直接获取结果,并输出不同信息,实际是comparisonresult的使用。

上面只是一个简单的案例,要想深入了解使用,还得看看这3个主要对象的作用。

    根据第3节的例子和过程,本节介绍3个核心类型的结构,在使用前搞懂他们的结构,可以更快的使用。由于本组件暂时没有提供帮助文档,所以我将这3个核心类的注释进行了翻译,并根据文章的注释手动制作一份chm格式的帮助文档。

    comparelogic就是比较对象主要对象。它只包括2个核心的东西:

就是配置属性config,这是个进行比较前最重要的设置,同时在comparelogic初始化时,也可以使用comparisonconfig传递参数进行初始化,这样就可以更简单,在某些情况下,不需要重复设置。采用统一的配置就可以了。如下面是的部分源代码:

比较方法。返回一个comparisonresult对象,这里设计到核心的比较方法的过程,就不追究了。

所以上述config属性我们在执行比较方法前,需要根据自己的需求进行设置,比如设置最大的不同数目等等。。比较方法很简单,核心在与返回的类型,接下来继续看。

    比较配置类,在comparelogic是作为一个属性,可以在程序中比较前进行设置的。其核心方法就是配置项目,例如,我将其核心代码贴出来,看一下,就一目了然了,这个组件要实现的不同条件下进行比较的效果和功能,就是靠这个配置来进行的。

    其他还有很多,详细看我提供的源代码。我对几个核心类进行了翻译,可以更快的进行使用和理解。

    比较结果也很重要,如果只是想简单的返回相等和不相等其实太容易了,这也是这个功能组件不一样的地方。它将结果和不同点都进行了考虑,可以在比较完成后查询到不同点这个对象,或者直接 的字符串,并将不同点的值也表现出来。使用它,主要注意3个 属性:

    这在demo代码中也有用到。调试的时候,大家看一看,如下图所示:

.NET平台开源项目速览(2)Compare .NET Objects对象比较组件1.Compare .NET Objects介绍2. Compare .NET Objects注意事项3.一个简单的使用案例4.三大核心对象介绍5.资源

    今天的内容就介绍到此。

  我文中的演示demo及项目的翻译部分,这里也提供一个下载,日期是在2015-5-22下载的基础上修改的。

  我手动制作了一个部分翻译后的组件帮助文档,如下图:

.NET平台开源项目速览(2)Compare .NET Objects对象比较组件1.Compare .NET Objects介绍2. Compare .NET Objects注意事项3.一个简单的使用案例4.三大核心对象介绍5.资源

继续阅读