Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何添加列表<;目标2>;列出<;目标1>;在C#foreach循环中?_C# - Fatal编程技术网

如何添加列表<;目标2>;列出<;目标1>;在C#foreach循环中?

如何添加列表<;目标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

我有一个列表,我正在填充来自web服务的一些Json。我可以用下面的代码填充displayRecords。但是,我很难让文本字段填充文本字段。每个显示记录可以有1到n个文本

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();