书接上回,我们今天开始实现对象集合与DataTable的相互转换。

打开网易新闻 查看精彩图片

01、接口设计

01、接口设计

上文中已经详细讲解了整体设计思路以及大致设计了需要哪些方法。下面我们先针对上文设计思想确定对外提供的接口。具体接口如下:

打开网易新闻 查看精彩图片

02、根据列名数组创建表格

02、根据列名数组创建表格

该方法实现比较简单,我们直接看代码:

打开网易新闻 查看精彩图片

我们进行一个简单的单元测试:

打开网易新闻 查看精彩图片

03、根据列名-类型键值对创建表格

03、根据列名-类型键值对创建表格

此方法是上一个方法的补充,默认直接根据列名创建表格,则所有列的数据类型都是string类型,而此方法可以指定每列的数据类型,实现也很简单,代码如下:

打开网易新闻 查看精彩图片

04、根据类创建表格

04、根据类创建表格

该方法是将类的属性名作为表格的列名称,属性对应的类型作为表格列的数据类型,把类转为表格。

同时我们需要约束类只能为结构体或类,而不能是枚举、基础类型、以及集合类型、委托、接口等。显然我们很难通过泛型约束达到我们的需求,因此我们首先需要对该方法的泛型进行类型校验。

校验成功后,我们只需要通过反射即可拿到类的所有属性信息,即可创建表格。同时我们约定如果属性设置了DescriptionAttribute特性,则特性值作为列名,如果没有设置特性则取属性名称作为列名。

打开网易新闻 查看精彩图片

下面我们针对枚举、字符串,基础类型、集合等情况进行详细的单元测试,代码如下:

打开网易新闻 查看精彩图片

:测试方法代码以及示例源码都已经上传至代码库,有兴趣的可以看看。https://gitee.com/hugogoos/Ideal