2012-07-29 95 views
-1

我有AnimalModel程序我坚持。 该计划包含一个抽象类动物与哺乳动物,昆虫,鸟,爬行动物和海洋的子类。在每个小类中还有两个动物亚类。从列表视图投射对象到另一个对象

例如,哺乳动物有狼和狗类。

我的问题是,我创建了一个将动物项添加到数组的方法。

我试图在含有例如狼还是狗,但没有成功哺乳动物对象一个ListView投的对象..

我已经在两个方面都没有他们的作品试图..

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

你应该[编辑你的问题](http://stackoverflow.com/posts/11713043/edit),并添加一个对应于你正在使用的语言/环境的标签。 – assylias 2012-07-29 21:33:53

+1

您能否告诉我们“哺乳动物”类型的定义?从我所能读的内容看,它看起来像哺乳动物可能是一个枚举,而动物似乎是一个类。 – 2012-07-30 21:42:08

+0

[你有什么尝试?](http://whathaveyoutried.com)你会得到什么错误?编译器错误?例外?请说明哪些类是'类',哪些类是'列'。 – GameScripting 2012-07-30 22:32:16

回答

0

我建议很多东西此代码,其中最重要的是:

  1. 随着lstCtgr不投射序数为另一种类型(枚举,我认为),我将清除列表项类包含文本r一个项目(ToString)的介绍和能够独立于列表的顺序获得实际的CategoryType。
  2. 我会用lstAnimal做类似的事情。如果你需要获得有关选择的信息,那么我会创建一个你可以添加到lstAnimal中的类,它可以提供这些信息。很像lstCtr,它实现了ToString并提供对Mammal对象的访问。

但是,你需要做什么甚至是你想要用你发布的代码来做什么都是非常不清楚的。如果你选择一个动物类(lstCtgr)一个实际的动物(lstAnml),这没有任何意义。 lstAnml中的动物看起来完全独立于lstCtr。

0

你真的应该为你的问题提供更多信息。由于您没有提供足够的信息,我需要做一些假设: -

  • Mammal是一个类,而不是枚举。 (因为枚举不能有子类或子枚举。)
  • CategoryType是枚举类,不是类,但它的一个值也被称为哺乳动物(即CategoryType.Mammal)。
  • lstAnml列表框,它的值是字符串是哺乳动物子类(如"MyNamespace.Wolf""MyNamespace.Dog")的完全限定类名。
  • Mammal,WolfDog类都具有无参数构造函数。

如果我上面的假设是错误的,请更新您的问题与缺少的信息。

如果我的上述假设是正确的,然后用下面的代码替换您的第一/第二次尝试: -

Type mammaltype = Type.GetType(lstAnml.SelectedItem.ToString()); 
Mammal mammalspecies = (Mammal) Activator.CreateInstance(mammaltype); 

但是,您的最后一个语句的逻辑似乎是错误的。 Mammal.MammalFactory()应该将枚举作为参数,而不是类实例。但是,如果真的Mammal是一个枚举,那么它不能有子......

因此,假设Mammal真的是一个类,而不是一个枚举,那么你的最后一句话应该简单地:

animal = mammalspecies; 
相关问题