2012-07-29 157 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;