如何在C#foreach循环中将List <Obect2>添加到List <Object1>?

时间:2019-12-20 16:43:11

标签: c#

我有一个列表,其中填充了Web服务中的一些Json。我可以使用以下代码填充displayRecords。但是,我无法让文本字段填充文本字段。每个displayRecord可以包含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;
    }
}

这是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; }
}

为清楚起见进行编辑:文本字段永远不会从第二个循环中获取值。它们都显示为空。

enter image description here

3 个答案:

答案 0 :(得分:2)

您正在分配一个string,当为List<string>的构造函数“询问”时,我认为这会起作用:

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

答案 1 :(得分:0)

我看到了一些问题。

如果您尝试填充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);
}

AddRange()将获取一个List并将其插入变量文本中。

如果要将单个字符串添加到列表,请使用Add()代替。

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.Add(displays.text);

    displayRecords.Add(displayRecord);
}

警告

如果存在一个uninstantiatedList(用null而不是Count = 0表示),则当您尝试添加或访问它时,它将引发错误。

答案 2 :(得分:0)

这应该让您想要:

var displayRecords = ro.serviceHistory.displayRecords
  .Select(r=>new DisplayRecord
    {
      displayDate = r.displayDate,
      odometer = r.odometer,
      type = r.type,
      text = r.text
    }).ToList();