次のコードを機能させるにはどうすればよいですか? C# のジェネリックをよく理解していないと思います。おそらく、誰かが私を正しい方向に向けることができます。
public abstract class A
{
}
public class B : A
{
}
public class C : A
{
}
public static List<C> GetCList()
{
return new List<C>();
}
static void Main(string[] args)
{
List<A> listA = new List<A>();
listA.Add(new B());
listA.Add(new C());
// Compiler cannot implicitly convert
List<A> listB = new List<B>();
// Compiler cannot implicitly convert
List<A> listC = GetCList();
// However, copying each element is fine
// It has something to do with generics (I think)
List<B> listD = new List<B>();
foreach (B b in listD)
{
listB.Add(b);
}
}
それはおそらく簡単な答えです。
更新: まず、これは C# 3.0 では不可能ですが、C# 4.0 では可能になります。
C# 3.0 で実行するには、これは 4.0 までの単なる回避策であり、次を使用します。
// Compiler is happy
List<A> listB = new List<B>().OfType<A>().ToList();
// Compiler is happy
List<A> listC = GetCList().OfType<A>().ToList();