public class A {
public int ID {get;set;}
public List<int> Things {get;set}
}
public class B : A {
public string Name {get;set;}
}
public static FillListAThings(ref List<A> lstA){
// ...
// code to fill the Things list in each A of lstA with bulk call to database containing all A's IDs from lstA
// ...
}
public static GetBList(){
var lstB = new List<B>();
// ...
// Fill B list, get IDs and names
// ...
// ERROR here, since ref List<B> cannot be converted to a ref List<A>
FillListAThings(ref lstB);
}
我可以理解无法将ref List A传递给期望ref List B的函数,因为类中会缺少成员,但为什么这不可能呢?我也不能通过LINQ将它作为List A转换,因为它变成了一个无法引用的丢弃变量。
我目前的解决方法是转换为列表A的临时变量,将其发送到要填充的函数,然后通过交叉ID将属性复制回原始列表。
// workaround
var tmpListA = lstB.Cast<A>().ToList();
FillListAThings(ref tmpListA);
foreach(var b in lstB)
{
var a = tmpListA.Where(x => x.ID == b.ID);
// ...
// code to copy properties
// ...
}
答案 0 :(得分:3)
您可以,但是您需要扩大方法签名以接受实施List<T>
的所有A
类型,而不仅仅是List<A>
本身。
public static void FillListAThings<T>(ref List<T> lstA) where T : A
{
// ...
// code to fill the Things list in each A of lstA with bulk call to database containing all A's IDs from lstA
// ...
}