2011-07-15 25 views
1

方案: 我有一個web表單,我從哪裏獲取對Item類的輸入現在我想將值分配給具有返回類型的列表的功能我該如何做。將自定義類轉換爲列表<>

item value = new item(), 
value.feature = serialtextbox.text; //error 

foreach (var item in value) //error 
{ 
item.SerialNo= serialtextbox.text; 
} 

項目和項目要素類

Class Item 
{ 
list<Itemfeature> features; 
} 

class ItemFeature 
    { 
    public int SerialNo 
    { 
     get { return serialno; } 
     set { serialno = value; } 
    } 

    public int Weight 
    { 
     get { return weight; } 
     set { weight = value; } 
    } 

}

PLZ幫我出

+1

請問您能展示至少完整的代碼片段嗎?這是什麼語言?那麼','在你的第一行呢? –

+0

是的,你有一個,在你的第一個結尾......這很可能是你的錯誤造成的。 – MGZero

回答

5

注:未指定任何語言,但它看起來像C#。我假設C#在這個答案。

這不是很清楚你想在這裏做什麼,但我會給它一個鏡頭。首先,你要發佈你正在使用的實際代碼。這段代碼甚至不會編譯,它會加載語法錯誤。

讓我們來看看你的第一個對象:

class Item 
{ 
    List<ItemFeature> features; 
} 

class ItemFeature 
{ 
    public int SerialNo 
    { 
    get { return serialno; } 
    set { serialno = value; } 
    } 

    public int Weight 
    { 
    get { return weight; } 
    set { weight = value; } 
    } 
} 

你有一個自定義類,ItemFeature,其中包括一個序列號(整數)和重量(整數)的。然後你有另一個自定義類,Item,其中包括一列ItemFeature s。

現在看起來您正在試圖添加一個新的ItemFeatureItem,然後循環遍歷所有這些並再次設置它們?像這樣的事情,也許?:

Item value = new Item(); 
value.features.Add(new ItemFeature { SerialNo = int.Parse(serialtextbox.Text) }); 

foreach (var item in value.features) 
{ 
    item.SerialNo = int.Parse(serialtextbox.Text); 
} 

(請注意,此代碼可能爲自由的手,你的代碼,所以我沒有測試過或任何東西。)

我在這裏改變是:

  1. 設置SerialNo屬性,而不是嘗試將ItemFeature直接設置爲值。您需要深入該對象的屬性以在該屬性上設置值,而不是將其設置爲整個對象。
  2. 將輸入(一個字符串)轉換爲屬性的類型(一個int)。
  3. 通過列表循環,而不是Item對象本身。 Item對象包含列表作爲屬性,但對象本身不是列表。您可以遍歷該屬性,而不是通過父對象。

有幾件事情要問/注:

  1. 究竟是你想做些什麼?你有一個對象列表,但你只設置一個,然後循環遍歷那個對象來重新設置它。爲什麼?
  2. 你可能想要考慮更多的類/屬性名稱。像「物品」這樣的東西可能有點不清楚。
  3. 你的Item類有一個公共變量,features。這通常是皺眉。最好使用一個屬性。這樣,如果你必須添加邏輯,你不會破壞對象本身之外的兼容性。ItemFeature類有這樣的屬性,這是很好的。如果您願意,可以通過使用automatic properties來縮短它們,只是爲了保持乾淨和簡單。
  4. 請注意,我的代碼沒有對serialtextbox.Text值進行任何輸入檢查。它應該是。我以更簡單的形式介紹它,作爲在理想條件下工作的介紹性方法。但是像下面這樣會更好:

var serialValue = 0; 

if (!int.TryParse(serialtextbox.Text, out serialValue)) 
{ 
    // Here you would probably present an error to the user stating that the form field failed validation. 
    // Maybe even throw an exception? Depends on how you handle errors. 
    // Mainly, exit the logic flow. 
    return; 
} 

var value = new Item(); 
value.features.Add(new ItemFeature { SerialNo = serialValue }); 

編輯:我只注意到我對.Add()調用實際上將失敗。在嘗試使用它之前,您需要初始化列表。考慮改變Item類是這樣的:在這裏改變

class Item 
{ 
    public List<ItemFeature> features { get; set; } 

    public Item() 
    { 
    features = new List<ItemFeature>(); 
    } 
} 

兩件事情:

  1. 我轉換的公衆成員的屬性,如前面提到的。
  2. 我添加了一個構造函數來初始化列表,以便可以使用它。否則,作爲參考類型,它將默認爲null。所以任何呼叫.Add()或列表上的任何其他方法將拋出NullReferenceException,因爲沒有對象可以調用方法。
+0

它會產生一個錯誤value.features.Add(new ItemFeature {SerialNo = serialValue});你調用的對象是空的。我通過創建列表的實例來解決它,然後在其中添加itemfeature的實例並最終分配給它。 value.features =列表實例 – Salman

+0

問題解決了,非常感謝您的幫助:) – Salman

+0

@ user751959:正確,請參閱我上次編輯的答案。比創建新實例更好的解決方案就是在類的構造函數中創建實例,以便它自動發生。否則,每次使用該類的實例時都必須手動創建實例,這是不必要的。 – David

相關問題