2015-12-23 47 views
2

我不確定如果我正在嘗試執行的操作是正確設置的,所以我正在尋求幫助。如何將清單<MyModel>投入清單<object>

我有一個基類A,它具有公共虛擬MethodA(...)。 在方法AI具有以下語句:

var recordToValidate = GetBulkRecordsToBeValidated(profileId); 
< more code that uses recordToValidate > 

在基礎類AI定義GetBulkRecordsToBeValidated如下:

internal virtual List<object> GetBulkRecordsToBeValidated(int profileId) 
{ 
    throw new NotImplementedException(); 
} 

我已經從A類繼承其它類(即B級從一類繼承,C類繼承自A類等)。

每個繼承的類都會覆蓋GetBulkRecordsToBeValidated,它會調用數據庫以返回該實體的特定記錄。每個實體都返回一個不同的模型,這就是爲什麼在基類中我有方法返回一個List對象。

在B組,它看起來是這樣的:

internal override List<object> GetBulkRecordsToBeValidated(int profileId) 
{ 
    return makes call to database which returns a List<ModelBRecords> 
} 

在C類,它看起來是這樣的:

internal override List<object> GetBulkRecordsToBeValidated(int profileId) 
{ 
    return makes call to database which returns a List<ModelCRecords> 
} 

是我得到的B類和C類以下錯誤的問題返回:

無法將表達式類型System.Collection.Generic.List ModelBRecords轉換爲返回類型System.Collection.Generic.List對象

我需要做什麼以便我可以將不同的列表類型返回到基類A的方法A中的GetBulkRecordsToValidate調用?

+0

你瞄準什麼版本的.NET? –

+1

@maksymiuk:[XY問題](http://meta.stackexchange.com/q/66377/138661)。 OP正在詢問關於演員的信息,但他真正需要的是一個通用的基礎類。 – Heinzi

回答

2

作爲快速修復,請使用.Cast<Object>.ToList()

然而,你可能要考慮使基類一般是這樣的:

public class A<T> 
{ 
    public void MethodA() 
    { 
     List<T> recordToValidate = GetBulkRecordsToBeValidated(profileId); 
     .... 
    } 

    internal virtual List<T> GetBulkRecordsToBeValidated(int profileId) // you might want to make this an abstract method instead of virtual 
    { 
     .... 
    }  
} 

public class C : A<ModelCRecords> 
{ 
    internal override List<ModelCRecords> GetBulkRecordsToBeValidated(int profileId) 
    { 
     return makes call to database which returns a List<ModelCRecords> 
    } 
} 
1

您可以創建泛型類

class A<T> 
{ 
    public virtual List<T> GetBulkStuff() { throw new Exception(); } 
} 

class B : A<ModelBRecords> 
{ 
    public override List<ModelBRecords> GetBulkStuff() 
    { 
     return base.GetBulkStuff(); 
    } 
}