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

时间:2014-06-24 23:56:14

标签: c#

我有一个像这样的对象数组

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)

2 个答案:

答案 0 :(得分:1)

同名并不意味着,它们的类型相同。 .NET无法神奇地推断出这一点。

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

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

但是,如果所有字段都相同,(或者即使它们不相同),您也可以使用AutoMapper等工具轻松转换它们。

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

  1. 快速LINQ查询。
  2. 映射类型的扩展方法。
  3. AutoMapper等工具
  4. 您选择的解决方案取决于以下因素:您执行此操作的频率,有多少呼叫者需要此等等。

答案 1 :(得分:0)

  

上述课程在两个部分中定义。

这在C#中无效,每个类都与所有其他类不同。

如果要在库之间传递数据,则必须使用一致类型。最流行的方法是使用基础库。