を私を助け注:ませ言語が指定されていないが、それは、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
を、持っています。次に、ItemFeature
のリストで構成される別のカスタムクラスItem
があります。
今度はを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);
}
(このコードは、コードとしておそらくフリーハンドであるので、私はそれか何かをテストしていないことに注意してください。)私はここで変更した内容
次のようになります。
- ItemFeatureを値に直接設定するのではなく、SerialNoプロパティを設定します。オブジェクトのプロパティを掘り下げて、オブジェクト全体に設定するのではなく、そのプロパティに値を設定する必要があります。
- 入力(文字列)をプロパティの型(int)に変換します。
Item
オブジェクト自体ではなく、リスト全体をループします。 Item
オブジェクトには、リストとしてプロパティーが含まれていますが、オブジェクト自体はリストではありません。親オブジェクトではなく、プロパティをループすることができます。 /ノートを依頼する
いくつかのこと:
正確に何をしようとする
- ?あなたはオブジェクトのリストを持っていますが、あなたはオブジェクトのリストを設定しています。そして、それをループして再び設定します。どうして?
- より多くのaptクラス/プロパティ名が必要な場合があります。 「アイテム」のようなものは少し不明なことがあります。
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