C# - 从string创建派生类实例,然后添加到基类列表

Mr *_*day -2 c# inheritance list activator

我将读取一个字符串输入,它将确定要创建的派生类的类型.然后,创建的对象将添加到基类对象列表中.

当我尝试将结果添加Activator.CreateInstance();到列表中时,我得到:

Cannot implicitly convert type 'object' to 'Namespace.Animal'. An explicit conversion exists (are you missing a cast?)

我得到了以下内容:

List<Animal> animals;

Type animal_type = Type.GetType(class_name); // eg lion, tiger
object new_animal = Activator.CreateInstance(animal_type);

animals.Add(new_animal);
Run Code Online (Sandbox Code Playgroud)

如何将新创建的对象添加到列表中?

JDB*_*JDB 6

正如错误所说,你需要一个明确的演员:

animals.Add( (Animal) new_animal);
Run Code Online (Sandbox Code Playgroud)

new_animal是类型的object.所以,new_animal几乎可以做任何事情.编译器需要您明确告诉它采取危险的步骤来假设它的类型Animal.它不会自己做出这个假设,因为它不能保证转换能够起作用.