如何将List <mymodel>转换为List <object>

时间:2015-12-23 20:31:57

标签: c#

我不确定我要做的是否正确设置,所以我正在寻求帮助。

我有一个基类A,它有一个公共虚拟MethodA(...)。 在方法A中,我有以下声明:

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

在基类A中,我按如下方式定义GetBulkRecordsToBeValidated:

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

我有其他继承自A类的类(即B类继承自A类,C类继承自A类等)。

每个继承的类都会覆盖GetBulkRecordsToBeValidated,它会调用数据库以返回该实体的特定记录。每个实体返回一个不同的模型,这就是为什么在基类中我有方法返回一个对象列表。

在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返回不同​​的列表类型?

2 个答案:

答案 0 :(得分: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 :(得分:1)

您可以创建泛型类

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

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