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); 
}
I can understand not being able to pass a ref List A to a function expecting ref List B, since there would be missing members in the class, but why isn't this possible? I can't cast it as List A through LINQ either, since then it becomes a throw-away variable that can't be referenced.
My current workaround is to cast to a temporary variable of a List A, send that to the function to fill, then copy the properties back to the original list by crossing on their IDs.
// 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
    // ...
}
 
    