Вы просите компилятор рассматривать List<PackageCall>
как List<AbstractPackageCall>
, а это не так. Другое дело, что каждый из этих экземпляров PackageCall
на самом деле является AbstractPackageCall
.
var calls = package.getCalls().Cast<AbstractPackageCall>().ToList();
Несмотря на то, что каждый элемент внутри возвращаемого значения package.getCalls()
происходит от AbstractPackageCall
, мы не можем рассматривать весь список как List<AbstractPackageCall>
. Вот что произойдет, если бы мы могли:
var calls = package.getCalls(); // calls is List<PackageCall>
List<AbstractPackageCalls> apcs = calls; // ILLEGAL, but assume we could do it
apcs.Add(SomeOtherConcretePackageCall()); // BOOM!
Если бы мы могли это сделать, мы могли бы добавить SomeOtherConcretePackageCall
к List<PackageCall>
.
import subprocess
ping_response = subprocess.Popen(["/bin/ping", "-c1", "-w100", "192.168.0.1"], stdout=subprocess.PIPE).stdout.read()