将类数组作为对象数组传递

阿加顿

我有一系列看起来像这样的对象

public class ViewFilterData
{
    public string Table { get; set; }
    public string Field { get; set; }
    public string Value { get; set; }
}

由于在单独的dll中调用函数,因此我需要将此数组作为object []传递。以上两节都定义了该类。

项目进行编译,但是当我尝试将数组中的每个对象强制转换为上一类时,我收到了invalidCastException,表明它“神奇地”知道了原始的类,即使它们完全相同,也拒绝将其转换为新的类。我是否需要使用反射并在数组中按对象逐个和按属性逐个创建一个新的类,将其编组?还是有一种更简单,更快捷的方法?考虑使用scructs,但是,如果可能的话,宁愿不要。

“无法将类型为'Original.ViewFilterData'的对象转换为类型SeparateDLL.ViewFilterData'。”

我这样称呼这个函数

var dt = oRepository.Page((object[])oDataRequest.Filters.ToArray())

并像这样定义它

public DataTable Page(object[] Filters)
拉贾·纳达尔(Raja Nadar)|

相同的名称并不表示它们具有相同的类型。.NET无法神奇地推断出这一点。

对于小对象,只需编写一个快速的LINQ查询:

var separateDllFilters = oDataRequest.Filters.Select(of => new SeparateDLL.ViewFilterData
{
 Table = of.Table,
 // so on
}).ToArray();

但是,如果所有字段都相同(或者即使它们都不相同),则可以使用AutoMapper之类的工具轻松地对其进行转换。

通常,这是解决方案的顺序:

  1. 快速的LINQ查询。
  2. 映射类型的扩展方法。
  3. 诸如AutoMapper之类的工具

您选择的解决方案取决于以下因素,例如,您执行此操作的频率,有多少呼叫者需要此信息等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章