将自定义类转换为列表<>

Sal*_*man 1 c# list

场景:我有一个Web表单,我现在正在为Item类输入输入,我想为具有返回类型列表的功能分配值,我该怎么做.

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

foreach ( var item in value) //error 
{
 item.SerialNo= serialtextbox.text; 
}
Run Code Online (Sandbox Code Playgroud)

项目和项目要素类

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; }
    }
Run Code Online (Sandbox Code Playgroud)

}

Plz帮助我

Dav*_*vid 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; }
  }
}
Run Code Online (Sandbox Code Playgroud)

您有一个自定义类,ItemFeature它由序列号(整数)和权重(整数)组成.然后你有另一个自定义类,Item它由一个ItemFeatures 列表组成.

现在看起来你正在尝试添加一个新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); 
}
Run Code Online (Sandbox Code Playgroud)

(请注意,此代码可能与您的代码一样自由,所以我没有测试它或任何东西.)

我在这里改变的是:

  1. 设置SerialNo属性,而不是尝试将ItemFeature直接设置为值.您需要深入了解对象的属性以在该属性上设置值,而不是仅将其设置为整个对象.
  2. 将输入(字符串)转换为属性的类型(int).
  3. 循环遍历列表,而不是Item对象本身.该Item对象包含一个列表作为属性,但该对象本身不是一个列表.您可以遍历该属性,而不是通过父对象.

一些要问/注意事项:

  1. 你究竟想做什么?你有一个对象列表,但你只是设置一个,然后循环通过那个对象再次设置它.为什么?
  2. 您可能想要考虑更多apt类/属性名称.像"物品"这样的东西可能有点不清楚.
  3. 你的Item班级有一个公共变量features.这通常是不赞成的.最好使用一个属性.这样,如果您必须在其后面添加逻辑,则不会破坏对象本身之外的兼容性.这个ItemFeature类有这样的属性,这很好.如果您愿意,可以通过使用自动属性来缩短它们,只是为了保持清洁和简单.
  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 } );
Run Code Online (Sandbox Code Playgroud)

编辑:我刚注意到我的呼叫.Add()实际上会失败.在尝试使用它之前,您需要初始化列表.考虑将Item类更改为以下内容:

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

  public Item()
  {
    features = new List<ItemFeature>();
  }
}
Run Code Online (Sandbox Code Playgroud)

这里改变了两件事:

  1. 如前所述,我将公共成员转换为财产.
  2. 我添加了一个构造函数,它初始化列表以便可以使用它.否则,作为引用类型,它将默认为null.因此.Add(),列表上的任何调用或任何其他方法都会抛出一个,NullReferenceException因为没有对象可以调用方法.