C# 将类的数组作为对象的数组传递

C# 将类的数组作为对象的数组传递,c#,C#,我有一组像这样的物体 public class ViewFilterData { public string Table { get; set; } public string Field { get; set; } public string Value { get; set; } } var dt = oRepository.Page((object[])oDataRequest.Filters.ToArray()) public DataTable Page(o

我有一组像这样的物体

public class ViewFilterData
{
    public string Table { get; set; }
    public string Field { get; set; }
    public string Value { get; set; }
}
var dt = oRepository.Page((object[])oDataRequest.Filters.ToArray())
public DataTable Page(object[] Filters)
由于在单独的dll中调用函数,我需要将此数组作为对象[]传递。上述类在两个部分中都有定义

然而,当我试图将数组中的每个对象强制转换为上面的类时,我得到一个invalidCastException,表示它“神奇地”知道最初的类,并拒绝将其强制转换为新类,即使它们完全相同。我是否需要使用反射并在数组对象上逐个对象和属性上逐个属性地创建一个新类编组?还是有更简单更快的方法?考虑过使用scructs,但是如果可能的话,我宁愿不要

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

我这样调用函数

public class ViewFilterData
{
    public string Table { get; set; }
    public string Field { get; set; }
    public string Value { get; set; }
}
var dt = oRepository.Page((object[])oDataRequest.Filters.ToArray())
public DataTable Page(object[] Filters)
然后像这样定义它

public class ViewFilterData
{
    public string Table { get; set; }
    public string Field { get; set; }
    public string Value { get; set; }
}
var dt = oRepository.Page((object[])oDataRequest.Filters.ToArray())
public DataTable Page(object[] Filters)

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

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

var separateDllFilters = oDataRequest.Filters.Select(of => new SeparateDLL.ViewFilterData
{
 Table = of.Table,
 // so on
}).ToArray();
但是,如果所有字段都相同(或者即使不相同),您可以使用AutoMapper之类的工具轻松地对其进行转换

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

  • 快速LINQ查询
  • 映射类型的扩展方法
  • 像AutoMapper这样的工具
  • 您选择的解决方案取决于一些因素,例如,您多久做一次,有多少呼叫者需要这样做,等等

    上述类在两个部分中都有定义

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


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

    您试图实现的是所谓的duck类型,而在C#中它不起作用。即使两个类具有相同的属性集,也不能将其中一个类的实例强制转换为另一个类的实例。如果它是
    object[]
    ,则应该能够发送
    yourtype[]
    ,而无需任何强制转换,在调用单独的dll之前添加上述代码。