将自定义类转换为列表<>
本文关键字:列表 转换 自定义 | 更新日期: 2023-09-27 18:02:07
>场景:我有一个 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; }
}
}
请帮帮我
注意:未指定语言,但它看起来像 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
的列表组成。
现在看起来您正在尝试向Item
添加新ItemFeature
,然后遍历所有这些并再次设置它们?。 也许是这样的东西?
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 直接设置为值。 您需要深入研究对象的属性以在该属性上设置值,而不仅仅是将其设置为整个对象。
- 将输入(字符串(转换为属性的类型(整数(。
- 循环遍历列表,而不是
Item
对象本身。Item
对象包含一个列表作为属性,但对象本身不是列表。 可以遍历属性,而不是遍历父对象。
要问/注意的几件事:
- 你到底想做什么? 您有一个对象列表,但您只设置了一个对象,然后循环访问该对象以再次设置它。 为什么?
- 您可能需要考虑更合适的类/属性名称。 像"项目"这样的东西可能有点不清楚。
- 您的
Item
类有一个公共变量features
。 这通常是不受欢迎的。 最好使用属性。 这样,如果您必须在它后面添加逻辑,您就不会破坏对象本身之外的兼容性。ItemFeature
类具有这样的属性,这很好。 如果您愿意,可以使用自动属性来进一步缩短它们,只是为了保持干净和简单。 - 请注意,我的代码没有对
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
,因为没有要调用方法的对象。