场景:我有一个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帮助我
注意:没有指定语言,但它看起来像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 列表组成.
现在看起来你正在尝试添加一个新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);
}
Run Code Online (Sandbox Code Playgroud)
(请注意,此代码可能与您的代码一样自由,所以我没有测试它或任何东西.)
我在这里改变的是:
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 } );
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)
这里改变了两件事:
null.因此.Add(),列表上的任何调用或任何其他方法都会抛出一个,NullReferenceException因为没有对象可以调用方法.