簡體   English   中英

將類數組作為對象數組傳遞

[英]Pass array of class as array of object

我有一系列看起來像這樣的對象

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

由於在單獨的dll中調用函數,因此我需要將此數組作為object []傳遞。 以上兩節都定義了此類。

Project編譯,但是當我嘗試將數組中的每個對象強制轉換為上一類時,我收到了invalidCastException,表明它“神奇地”知道了原始類,即使它們完全相同,也拒絕將其強制轉換為新的類。 我是否需要使用反射並創建一個新類,將每個對象逐個排列在數組上,將每個實體逐個排列在數組上? 還是有一種更簡單,更快捷的方法? 考慮使用scructs,但是如果可能的話,寧願不要。

“無法將類型為'Original.ViewFilterData'的對象轉換為類型SeparateDLL.ViewFilterData'。”

我這樣調用函數

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之類的工具輕松地對其進行轉換。

通常,這是解決方案的順序:

  1. 快速的LINQ查詢。
  2. 映射類型的擴展方法。
  3. 諸如AutoMapper之類的工具

您選擇的解決方案取決於以下因素,例如,您執行此操作的頻率,有多少呼叫者需要此信息等。

以上兩節都定義了此類。

這在C#中無效,每個類都與所有其他類不同。

如果要在庫之間傳遞數據,則必須使用一致的類型。 最受歡迎的方法是使用基礎庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM