如何添加列表<;目标2>;列出<;目标1>;在C#foreach循环中?
我有一个列表,我正在填充来自web服务的一些Json。我可以用下面的代码填充displayRecords。但是,我很难让文本字段填充文本字段。每个显示记录可以有1到n个文本如何添加列表<;目标2>;列出<;目标1>;在C#foreach循环中?,c#,C#,我有一个列表,我正在填充来自web服务的一些Json。我可以用下面的代码填充displayRecords。但是,我很难让文本字段填充文本字段。每个显示记录可以有1到n个文本 List<DisplayRecord> displayRecords = new List<DisplayRecord>(); foreach (var displays in ro.serviceHistory.displayRecords) { displayRecords.Add(new
List<DisplayRecord> displayRecords = new List<DisplayRecord>();
foreach (var displays in ro.serviceHistory.displayRecords)
{
displayRecords.Add(new DisplayRecord
{
displayDate = displays.displayDate,
odometer = displays.odometer,
type = displays.type
});
foreach(var texts in ro.serviceHistory.displayRecords)
{
texts.text = displays.text;
}
}
List displayRecords=new List();
foreach(变量显示在ro.serviceHistory.displayRecords中)
{
添加(新的显示记录
{
displayDate=displays.displayDate,
里程表=显示。里程表,
type=displays.type
});
foreach(ro.serviceHistory.displayRecords中的变量文本)
{
text.text=displays.text;
}
}
这是DisplayRecord类
public class DisplayRecord
{
public string displayDate { get; set; }
public string odometer { get; set; }
public string type { get; set; }
public List<string> text { get; set; }
}
公共类显示记录
{
公共字符串displayDate{get;set;}
公共字符串里程表{get;set;}
公共字符串类型{get;set;}
公共列表文本{get;set;}
}
为清晰起见进行编辑文本字段永远不会从第二个循环中获取值。它们都显示为空
您正在分配一个
字符串
,当构造函数“询问”一个列表时,我认为这会起作用:
List<DisplayRecord> displayRecords = new List<DisplayRecord>();
foreach (var displays in ro.serviceHistory.displayRecords)
{
displayRecords.Add(new DisplayRecord
{
displayDate = displays.displayDate,
odometer = displays.odometer,
type = displays.type,
text = displays.text;
});
}
List displayRecords=new List();
foreach(变量显示在ro.serviceHistory.displayRecords中)
{
添加(新的显示记录
{
displayDate=displays.displayDate,
里程表=显示。里程表,
type=displays.type,
text=displays.text;
});
}
我发现了一些问题。
如果试图填充DisplayRecord类的text属性,则必须将其添加到列表中,而不是直接将其设置为字符串
因为我不知道ro.serviceHistory.displayRecords.text
是否是一个列表,所以我在下面两个解决方案中都加入了:
您需要执行以下操作:
List<DisplayRecord> displayRecords = new List<DisplayRecord>();
foreach (var displays in ro.serviceHistory.displayRecords)
{
var displayRecord = new DisplayRecord
{
displayDate = displays.displayDate,
odometer = displays.odometer,
type = displays.type
}
displayRecord.text.AddRange(displays.text);
displayRecords.Add(displayRecord);
}
List displayRecords=new List();
foreach(变量显示在ro.serviceHistory.displayRecords中)
{
var displayRecord=新的displayRecord
{
displayDate=displays.displayDate,
里程表=显示。里程表,
type=displays.type
}
displayRecord.text.AddRange(displays.text);
displayRecords.Add(displayRecord);
}
AddRange()将获取一个列表并将其插入变量文本中
如果要向列表中添加单个字符串,请改用add()
List displayRecords=new List();
foreach(变量显示在ro.serviceHistory.displayRecords中)
{
var displayRecord=新的displayRecord
{
displayDate=displays.displayDate,
里程表=显示。里程表,
type=displays.type
}
displayRecord.text.Add(displays.text);
displayRecords.Add(displayRecord);
}
警告
如果您有一个未实例化列表(表示null而不是Count=0),那么当您尝试添加或访问它时,它将抛出一个错误。这将得到您想要的:
var displayRecords = ro.serviceHistory.displayRecords
.Select(r=>new DisplayRecord
{
displayDate = r.displayDate,
odometer = r.odometer,
type = r.type,
text = r.text
}).ToList();
什么不起作用?内部循环不是在尝试将字符串分配给列表吗?@FelipeGutierrez否,文本和显示属于DisplayRecord
,因此两者都是List
。问题是OP在同一列表中迭代两次,并将列表的每个元素的text
属性分配给同一列表中每个元素的text
属性。为什么不displayRecords.AddRange(ro.serviceHistory.displayRecords)
?创建新的DisplayRecord时,不能将其文本属性设置为displays.text吗?删除第二个loopOP不是将字符串分配给列表,正如我在问题中的评论所述。但是您的代码是正确的,所以,请更正第一行。@Felipe Gutierrez我最初就是这样写的,但我甚至没有尝试运行它,因为它没有,而且对我来说仍然没有意义,多个文本值被添加到一对一的赋值中。不管怎样,它确实有效,谢谢。因为公共列表文本{get;set;}只接受多个文本记录作为一个列表,所以它工作吗?@BuckHicks是的,您正在设置List@BuckHicks它之所以有效是因为您正在将列表
分配给列表
,为什么它不起作用?是同一类型的。请注意,List
是一种引用类型,因此您没有复制列表,而是将它们都指向同一个对象。如果您修改一个列表,另一个列表也将被修改。
var displayRecords = ro.serviceHistory.displayRecords
.Select(r=>new DisplayRecord
{
displayDate = r.displayDate,
odometer = r.odometer,
type = r.type,
text = r.text
}).ToList();