我有AnimalModel程序,我被困住了。 该程序包含一个Abstract类Animal,其子类为Mammal,Insect,Bird,Reptile和Marine。在每个子类中还有两个子类动物。
例如,哺乳动物有狼和狗类。
我的问题是我创建了一种将动物项添加到数组的方法。
我正在尝试将包含例如狼或狗的listview中的对象转换为Mammal对象而没有成功。
我尝试过两种方式,但都没有。
private void AddAnimalItem()
{
string m_age = txtAge.Text;
string m_Name = txtName.Text;
CategoryType m_CategoryType = (CategoryType)(lstCtgr.SelectedIndex);
Animals animal = null;
switch(m_CategoryType)
{
case CategoryType.Mammal:
// first attempt
Mammal mammalspecies = (Mammal)Enum.Parse(typeof(Mammal),
lstAnml.SelectedItem.ToString());
// second attempt
Mammal mammalspecies = lstAnimal.SelectedItems.Cast<Mammal>();
// Static method for creating an Mammal to an animal
animal = Mammal.MammalFactory(mammalspecies);
break;
}
/* ... */
}
答案 0 :(得分:0)
我会为这段代码提出很多建议,其中最重要的是:
但是,我们非常不清楚您需要做什么,甚至是您尝试使用您发布的代码执行的操作。你们都选择了一种动物(lstCtgr)和是一种真正的动物(lstAnml)是没有意义的。动物在lstAnml中的含义似乎完全独立于lstCtr。
答案 1 :(得分:0)
您真的应该为您的问题提供更多信息。由于您没有提供足够的信息,我需要做一些假设: -
Mammal
是一个类,而不是枚举。 (因为枚举不能有子类或子枚举。)CategoryType
是一个枚举,而不是一个类,但其中一个值也称为 Mammal (即CategoryType.Mammal
)。lstAnml
是 ListBox ,其值是字符串,它们是Mammal子类的完全限定类名称(例如"MyNamespace.Wolf"
},"MyNamespace.Dog"
)。Mammal
,Wolf
和Dog
类都有无参数构造函数。如果我的上述假设有误,请用缺失的信息更新您的问题。
如果我的上述假设是正确的,那么用以下内容替换您的第一次/第二次尝试: -
Type mammaltype = Type.GetType(lstAnml.SelectedItem.ToString());
Mammal mammalspecies = (Mammal) Activator.CreateInstance(mammaltype);
然而,你最后一句话的逻辑似乎是错误的。 Mammal.MammalFactory()
应该将 enum 作为参数,而不是类实例。但如果Mammal
确实是一个枚举,那么就不能有子类...
所以假设Mammal
确实是一个类,而不是一个枚举,那么你的最后一个陈述应该只是:
animal = mammalspecies;