[英]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之類的工具輕松地對其進行轉換。
通常,這是解決方案的順序:
您選擇的解決方案取決於以下因素,例如,您執行此操作的頻率,有多少呼叫者需要此信息等。
以上兩節都定義了此類。
這在C#中無效,每個類都與所有其他類不同。
如果要在庫之間傳遞數據,則必須使用一致的類型。 最受歡迎的方法是使用基礎庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.