我不确定我要做的是否正确设置,所以我正在寻求帮助。
我有一个基类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返回不同的列表类型?
答案 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();
}
}