注:未指定任何語言,但它看起來像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。
現在看起來您正在試圖添加一個新的ItemFeature
到Item
,然後循環遍歷所有這些並再次設置它們?像這樣的事情,也許?:
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);
}
(請注意,此代碼可能爲自由的手,你的代碼,所以我沒有測試過或任何東西。)
我在這裏改變是:
- 設置SerialNo屬性,而不是嘗試將ItemFeature直接設置爲值。您需要深入該對象的屬性以在該屬性上設置值,而不是將其設置爲整個對象。
- 將輸入(一個字符串)轉換爲屬性的類型(一個int)。
- 通過列表循環,而不是
Item
對象本身。 Item
對象包含列表作爲屬性,但對象本身不是列表。您可以遍歷該屬性,而不是通過父對象。
有幾件事情要問/注:
- 究竟是你想做些什麼?你有一個對象列表,但你只設置一個,然後循環遍歷那個對象來重新設置它。爲什麼?
- 你可能想要考慮更多的類/屬性名稱。像「物品」這樣的東西可能有點不清楚。
- 你的
Item
類有一個公共變量,features
。這通常是皺眉。最好使用一個屬性。這樣,如果你必須添加邏輯,你不會破壞對象本身之外的兼容性。ItemFeature
類有這樣的屬性,這是很好的。如果您願意,可以通過使用automatic properties來縮短它們,只是爲了保持乾淨和簡單。
- 請注意,我的代碼沒有對
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>();
}
}
兩件事情:
- 我轉換的公衆成員的屬性,如前面提到的。
- 我添加了一個構造函數來初始化列表,以便可以使用它。否則,作爲參考類型,它將默認爲
null
。所以任何呼叫.Add()
或列表上的任何其他方法將拋出NullReferenceException
,因爲沒有對象可以調用方法。
請問您能展示至少完整的代碼片段嗎?這是什麼語言?那麼','在你的第一行呢? –
是的,你有一個,在你的第一個結尾......這很可能是你的錯誤造成的。 – MGZero